質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

2401閲覧

Android カメラを連続して起動できない

HiruLow

総合スコア55

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2018/02/15 04:31

ネットの情報を元に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(); } } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

再度コードを見直し、きちんとClose処理を修正したら解決しました。

投稿2018/02/18 05:39

HiruLow

総合スコア55

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問