2012-06-27 24 views

答えて

4

アンドロイドカメラが使用中であるかどうかを確認する方法はありますか?

カメラが使用である場合は、[はい、Camera.open()はあなたに例外を与えるだろう。 docsから

/** A safe way to get an instance of the Camera object. */ 
public static Camera getCameraInstance(){ 
    Camera c = null; 
    try { 
     c = Camera.open(); // attempt to get a Camera instance 
    } 
    catch (Exception e){ 
     // Camera is not available (in use or does not exist) 
    } 
    return c; // returns null if camera is unavailable 
} 
+0

ありがとうございます。既にカメラが使用されていることが判明した場合、どのようにカメラを使用できますか?キャッチブロックでカメラを放してからもう一度開こうとしていますか? – user1414146

+0

@ user1414146他のアプリケーションがカメラで完了するまで待つ必要があります:)そして再試行してください。 – COD3BOY

2

私はあなたがあなた自身の活動やアプリケーションカメラ自体に始めると、この質問がされるカメラのためのランニング活動としてリリースされる、いくつかの回を求められている理由がわかりません休止状態に入る。

+5

しかし、彼がバックグラウンドサービスを実行している場合、カメラアプリケーションはコードを実行している最中にいる可能性があります。 – Eric

+0

フォアグラウンドアプリにはおすすめのアプリですが、すべてのアプリやコードがこのように動作するわけではありません。 – Sam

1

私はこれが本当に古い質問であることを知っていますが、私は同じことについて不思議なGoogle検索でそれを見つけました。 Androidの新しいバージョンでは、CameraManager.AvailabilityCallbackを登録して、カメラが使用中であるかどうかを判断できます。

import android.hardware.camera2.CameraManager; 

    // within constructor 
    // Figure out if Camera is Available or Not 
    CameraManager cam_manager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE); 
    cam_manager.registerAvailabilityCallback(camAvailCallback, mHandler); 


    CameraManager.AvailabilityCallback camAvailCallback = new CameraManager.AvailabilityCallback() { 
    public void onCameraAvailable(String cameraId) { 

     cameraInUse=false; 
     Log.d(TAG, "notified that camera is not in use."); 

    } 

    public void onCameraUnavailable(String cameraId) { 

     cameraInUse=true; 
     Log.d(TAG, "notified that camera is in use."); 

    } 
}; 
+0

アンドロイド5.1には、これが壊れている可能性があるというバグがあります(https://code.google.com/p/android/issues/detail?id=164769)。これらのバージョンでは、 '' cam_manager.getCameraIdList() '' 'を呼び出して、サービスを適切に初期化してから,AvailabilityCallbackを登録する必要があります。 – PressingOnAlways

2

あなたはそれが本当で、カメラは、いくつかのアプリによって使用中である返すこのmethod.ifを試すことができます:ここではいくつかのサンプルコードです。

public boolean isCameraUsebyApp() { 
    Camera camera = null; 
    try { 
     camera = Camera.open(); 
    } catch (RuntimeException e) { 
     return true; 
    } finally { 
     if (camera != null) camera.release(); 
    } 
    return false; 
} 

次に、カメラを再起動する必要があるため、デバイスを再起動するようにユーザーに通知します。

関連する問題