ネットの情報を元にCamera2をくんだのですが、2回目の呼び出しで正常に起動しなくなってしまいました。
エラーは
E/Camera: Error 1
となります。
OnResumeで再度関数の呼び出しもやってみましたが、そうすると初期起動時にエラーが発生してしまいます。
@Override protected void onResume(){ super.onResume(); prepareCameraView(); }
public class Camera2Activity extends Activity { private Size mPreviewSize; private TextureView mTextureView; private CameraDevice mCameraDevice; private CaptureRequest.Builder mPreviewBuilder; private CameraCaptureSession mPreviewSession; private Button mBtnTakingPhoto; private String filepath; Camera2Activity _Cam; private static final SparseIntArray ORIENTATIONS = new SparseIntArray(); static { ORIENTATIONS.append(Surface.ROTATION_0, 90); ORIENTATIONS.append(Surface.ROTATION_90, 0); ORIENTATIONS.append(Surface.ROTATION_180, 270); ORIENTATIONS.append(Surface.ROTATION_270, 180); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); _Cam=this; StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() .detectAll() .penaltyLog() .build(); StrictMode.setThreadPolicy(policy); // フルスクリーン表示. getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_camera); mTextureView = (TextureView) findViewById(R.id.camera2_view); mTextureView.setSurfaceTextureListener(mCameraViewStatusChanged); mBtnTakingPhoto = (Button) findViewById(R.id.btn_taking_photo); mBtnTakingPhoto.setOnClickListener(mBtnShotClicked); } private final TextureView.SurfaceTextureListener mCameraViewStatusChanged = new TextureView.SurfaceTextureListener() { @Override public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { prepareCameraView(); } @Override public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { } @Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { return false; } @Override public void onSurfaceTextureUpdated(SurfaceTexture surface) { } }; private final View.OnClickListener mBtnShotClicked = new View.OnClickListener() { @Override public void onClick(View v) { takePicture(); } }; @TargetApi(21) private void prepareCameraView() { CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); try { for (String strCameraId : manager.getCameraIdList()) { CameraCharacteristics characteristics = manager.getCameraCharacteristics(strCameraId); if (characteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT) { continue; } StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); mPreviewSize = map.getOutputSizes(SurfaceTexture.class)[0]; this.configureTransform(); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { } else{ requestLocationPermission(); } manager.openCamera(strCameraId, new CameraDevice.StateCallback() { @Override public void onOpened(CameraDevice camera) { mCameraDevice = camera; createCameraPreviewSession(); } @Override public void onDisconnected(CameraDevice cmdCamera) { cmdCamera.close(); mCameraDevice = null; } @Override public void onError(CameraDevice cmdCamera, int error) { cmdCamera.close(); mCameraDevice = null; } }, null); } } catch (CameraAccessException e) { e.printStackTrace(); } } ... final CameraCaptureSession.CaptureCallback captureListener = new CameraCaptureSession.CaptureCallback() { @Override public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) { super.onCaptureCompleted(session, request, result); filepath=file.toString(); if (ActivityCompat.checkSelfPermission(_Cam, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); File f = new File(file.toString()); Uri contentUri = Uri.fromFile(f); mediaScanIntent.setData(contentUri); Intent resultIntent = new Intent(); resultIntent.putExtra("data",file.toString()); setResult(RESULT_OK, resultIntent); finish(); } else{ requestLocationPermission2(); } } }; mCameraDevice.createCaptureSession(outputSurfaces, new CameraCaptureSession.StateCallback() { @Override public void onConfigured(CameraCaptureSession session) { try { session.capture(captureBuilder.build(), captureListener, backgroudHandler); } catch (CameraAccessException e) { e.printStackTrace(); } } @Override public void onConfigureFailed(CameraCaptureSession session) { } }, backgroudHandler); String[] paths = {strSaveDir + "/" + strSaveFileName}; String[] mimeTypes = {"image/jpeg"}; MediaScannerConnection.scanFile(getApplicationContext(), paths, mimeTypes, mScanSavedFileCompleted); } catch (CameraAccessException e) { e.printStackTrace(); } } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。