1

これをデバッガーで実行すると、info.facing == 0 と表示されます。これは、背面カメラであることを意味します。

Camrea オブジェクトをインスタンス化しようとすると、null になります。

エミュレーターで、デバイスを背面カメラを無効にし、前面カメラを有効に設定しました。背面カメラがないのに背面カメラがあるとデバイスが判断するのはなぜですか?

Eclipse ADT を使用しています。

これが私の方法です。2 番目のループに到達することはありません。getCamreaInstance は null である c を返します。

public static Camera getCameraInstance(){
        Camera c = null;

        CameraInfo info = new CameraInfo();
        if (info.facing == CameraInfo.CAMERA_FACING_BACK){

            //Calling Camera.open() throws an exception if the camera is already in use by another application, so we wrap it in a try block.
            //Failing to check for exceptions if the camera is in use or does not exist will cause your application to be shut down by the system.
            try {
                c = Camera.open();
            }
            catch (Exception e){
                // Camera is not available (in use or does not exist)
            }
            return c;
        }
        //we want the back facing, if we cant get that then we try and get the front facing
        else if (info.facing == CameraInfo.CAMERA_FACING_FRONT){
            c = Camera.open(Camera.getNumberOfCameras()-1); //i should test and see if -1 is a valid value in the case that a device has no camera
            return c;
        }
        else{
            //there are no cameras, so we need to account for that since 'c' will be null
            return c;
        }

    }
4

1 に答える 1

1

この行:

CameraInfo info = new CameraInfo();

現在のカメラ構成を取得しません。これは単なる空のデフォルト コンストラクタです。正確な CameraInfo オブジェクトを取得する唯一の方法は、Camera#getCameraInfo()です。

null Camera を取得する理由は、デフォルトfacingが 0 であるためです。そのため、最初のブロックに入り、次のopen()理由で null を返すことを試みます。

デバイスに背面カメラがない場合、これは null を返します。

最初から電話するだけgetNumberOfCameras()で、カメラの数を確認できます。次に、1 つを開き、それCameraInfoがどちらの方向を向いているかを確認します。

ただし、常にデフォルトで背面カメラが必要な場合 (コードを考えるとそう思われます)、チェックを削除しfacingて null on をチェックするだけopen()です。

于 2013-10-02T15:31:16.680 に答える