同様の質問がありましたが、解決されませんでした。
W/CameraBase:カメラへの接続中にエラーが発生しました:camera.open()呼び出しで
私は(当然のことながら)カメラを使用しているアプリを持っています。正常に動作しています。ただし、コードの変更がない場合、ビルド間でアプリがクラッシュし始めました(Gitコミット履歴でコードの変更がないことを確認しました)。
問題がハードウェアのどこかにあることをさらに確認するために、同じコードを別の電話で実行しましたが、問題なく動作します。どういうわけかカメラがロックされて開かない。
関連するコードは次のとおりです。
プレビューオブジェクトを作成する
_cameraPreview = new CameraPreview(getActivity(),_camera);
これはその作成コードです
public CameraPreview(Context context, Camera camera)
{
super(context);
_camera = camera;
_surfaceHolder = getHolder();
_surfaceHolder.addCallback(this);
}
カメラを開く:
//デフォルトで背面カメラを開きます
public static Camera getCameraInstance()
{
Camera c = null;
try
{
c = Camera.open();
}catch (Exception e)
{
e.printStackTrace();
}
return c;
}
ここでエラーが発生します。camera.Openは次のスタックトレースでエラーをスローします。カメラオブジェクトがnullです。このコードは公式のAndroidドキュメントからのものですが、セッションの外部からロックされている場合に「カメラを解放する」方法については説明していません。
完全なログアウトは
W/CameraBase﹕ An error occurred while connecting to camera: 0
W/System.err﹕ Java.lang.RuntimeException: Fail to connect to camera service
W/System.err﹕ at Android.hardware.Camera.<init>(Camera.Java:497)
W/System.err﹕ at Android.hardware.Camera.open(Camera.Java:357)
W/System.err﹕ at co.pumpup.app.EditPhotoFragment.getCameraInstance(EditPhotoFragment.Java:241)
W/System.err﹕ at co.pumpup.app.EditPhotoFragment.onCreateView(EditPhotoFragment.Java:76)
W/System.err﹕ at Android.app.Fragment.performCreateView(Fragment.Java:2053)
W/System.err﹕ at Android.app.FragmentManagerImpl.moveToState(FragmentManager.Java:894)
W/System.err﹕ at Android.app.FragmentManagerImpl.moveToState(FragmentManager.Java:1067)
W/System.err﹕ at Android.app.BackStackRecord.run(BackStackRecord.Java:834)
W/System.err﹕ at Android.app.FragmentManagerImpl.execPendingActions(FragmentManager.Java:1452)
W/System.err﹕ at Android.app.Activity.performStart(Activity.Java:6005)
W/System.err﹕ at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2288)
W/System.err﹕ at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2387)
W/System.err﹕ at Android.app.ActivityThread.access$800(ActivityThread.Java:151)
W/System.err﹕ at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1303)
W/System.err﹕ at Android.os.Handler.dispatchMessage(Handler.Java:102)
W/System.err﹕ at Android.os.Looper.loop(Looper.Java:135)
W/System.err﹕ at Android.app.ActivityThread.main(ActivityThread.Java:5254)
W/System.err﹕ at Java.lang.reflect.Method.invoke(Native Method)
W/System.err﹕ at Java.lang.reflect.Method.invoke(Method.Java:372)
W/System.err﹕ at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:903)
W/System.err﹕ at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:698)
このようにロックされたカメラを「ロック解除」する方法を教えてください
「カメラサービスへの接続に失敗しました」とは、(または他の)カメラアプリがカメラを適切に解放できなかったことを意味します。私もアプリを開発しているときに、これは時々私に起こりました。私が最初に試みることは、電話に付属しているデフォルトのカメラアプリからカメラを開くことです(「カメラ」ボタンをタップするだけです)。それが開かない場合、唯一のオプションは電話を再起動することでした。
これは推測ですが、コードにバグがたまにしか現れない可能性があり、それは純粋な運によって今まで現れなかっただけです。それでも解決しない場合は、「Androidでカメラを正しくリリースする方法」に関する質問を確認してください。彼らは私がこれに対処するのを手伝ってくれました。
Android 6.0(APIレベル23)以降、ユーザーはアプリのインストール時ではなく、アプリの実行中にアプリに権限を付与します。このアプローチでは、ユーザーがアプリをインストールしないため、アプリのインストールプロセスが合理化されます。アプリをインストールまたは更新するときに権限を付与する必要があります。また、ユーザーはアプリの機能をより細かく制御できます。たとえば、ユーザーはカメラアプリにカメラへのアクセスを許可するが、デバイスの場所にはアクセスを許可しないように選択できます。アプリの[設定]画面に移動して、いつでも権限を取り消すことができます。 http://developer.Android.com/training/permissions/requesting.html
これがあなたの場合かどうかはわかりませんが、それは私に起こったばかりなので、私はそれを共有したいと思いました。私のアプリは同じことをしていました(Camera.open()を囲んで試したので、最初は表示されませんでした)しかし、panonskiが言ったことを実行し、システムカメラアプリからカメラをオンにして、それが正面カメラを使用します。リアカメラに戻すと、アプリが再び機能するようになりました。
Camera.open()の使用からCamera.open(Camera.CameraInfo.CAMERA_FACING_BACK)に変更しましたが、これは、カメラが以前にどのように残されていても機能するようになりました。 (Galaxy Note 4を使用)。
うまくいけば、これが役立つでしょう。