0

最新の Camera 2 API を使用してカメラ アプリケーションを開発しています。ボタンをクリックするたびに前面カメラと背面カメラを選択するボタンがアプリにあります。

そのためのコードは次のとおりです。

switch_camera.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // facing = characteristics.get(CameraCharacteristics.LENS_FACING);
        if (facing != null && facing == CameraCharacteristics.LENS_FACING_FRONT) {
            //isfrontcam=true;
            try {
                manager.openCamera("0",mStateCallback,mBackgroundHandler);
            } catch (SecurityException e) {
                e.printStackTrace();
            } catch (CameraAccessException e) {
                e.printStackTrace();
            }
        } else if (facing != null && facing == CameraCharacteristics.LENS_FACING_BACK) {
            // isfrontcam = true;
            try {
                manager.openCamera("1", mStateCallback, mBackgroundHandler);
            } catch (SecurityException e) {
                e.printStackTrace();
            } catch (CameraAccessException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

私の問題は、ボタンをクリックしてカメラを選択すると、アプリが自動的に最小化されることです。上記のスニペットは、ボタンのクリック時に実行されます。このバグの理由がわかりませんでした。誰でも助けることができますか?

4

1 に答える 1

0

実際の問題を理解するには logcat 情報が必要です。多くの情報がなくても、以下の解決策が役立つと思います。

--> manager.openCamera("0",mStateCallback,mBackgroundHandler); の代わりに & manager.openCamera("1", mStateCallback, mBackgroundHandler);

試してください: manager.openCamera(getBackFacingCameraId(cManager), mStateCallback,mBackgroundHandler);

manager.openCamera(getFrontFacingCameraId(cManager),mStateCallback, mBackgroundHandler);

String getFrontFacingCameraId(CameraManager cManager){
   for(final String cameraId : cManager.getCameraIdList()){
         CameraCharacteristics characteristics =     
         cManager.getCameraCharacteristics(cameraId);
         int cOrientation =        
         characteristics.get(CameraCharacteristics.LENS_FACING);
         if(cOrientation == CameraCharacteristics.LENS_FACING_FRONT)      
             return cameraId;
         }
         return null;
}


String getBackFacingCameraId(CameraManager cManager){
     for(final String cameraId : cManager.getCameraIdList()){
         CameraCharacteristics characteristics =      
         cManager.getCameraCharacteristics(cameraId);
         int cOrientation =   
         characteristics.get(CameraCharacteristics.LENS_FACING);
         if(cOrientation == CameraCharacteristics.LENS_FACING_BACK)   
            return cameraId;
         }
         return null;
}

参照: https://android.googlesource.com/platform/packages/apps/Camera2/+/f5e51ec44934d6d687267d2aff6386f5b728dd9f/src/com/android/camera/one/v2/OneCameraManagerImpl.java

于 2016-02-12T11:57:44.247 に答える