1. ホーム
  2. android

[解決済み】カメラサービスへの接続に失敗しました。

2022-02-15 15:42:19

質問内容

携帯電話のカメラにアクセスしようとしています。ウィジェットにコードを入れる前に、簡単なスタブアプリを書いています。あまりうまくいきません。コードは常にランタイム例外 "failed to connect to camera service" を投げます。うまくいかないコード(コモンズウェアの例から抜粋)は次のとおりです。

    @Override
    public void onResume() {
        super.onResume();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
            Camera.CameraInfo info = new Camera.CameraInfo();
            for (int i = 0; i < Camera.getNumberOfCameras(); i++) {
                Camera.getCameraInfo(i, info);
                if (info.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
                    try {
                        // Gets to here OK
                        camera = Camera.open(i);
                    } catch (Exception e) {
                        e.printStackTrace();
                        //  throws runtime exception :"Failed to connect to camera service"
                    }
                }
            }
        }
}

で、私のマニフェストは (10月20日修正) :

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.nbt.cameratest"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk android:minSdkVersion="9" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".CameraTestActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

            <uses-permission android:name="android.permission.CAMERA" />
            <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    </application>
</manifest>

何が問題なのか、どなたかご指摘ください。

10月20日更新

SDK 4.0のLogcatは壊れており、ログの最後を表示しないので、コマンドラインのadb logcatからこの部分をできる限りカットしています。

W/ServiceManager( 2588): Permission failure: android.permission.CAMERA from uid=10136 pid=5744
E/CameraService( 2588): Permission Denial: can't use the camera pid=5744, uid=10136
W/System.err( 5744): java.lang.RuntimeException: Fail to connect to camera service
W/System.err( 5744):    at android.hardware.Camera.native_setup(Native Method)
W/System.err( 5744):    at android.hardware.Camera.<init>(Camera.java:294)
W/System.err( 5744):    at android.hardware.Camera.open(Camera.java:255)
etc..

私はそれがマニフェストで宣言されているように私は許可を得ていない理由がわからない

どうすればいいですか?

いくつかあります。

  1. なぜactivityタグの中にuse-permissionsとuse-featuresタグがあるのですか。一般的に、パーミッションは <manifest> タグを使用します。これが問題の一部である可能性があります。

  2. アンドロイドによると カメラオープンドキュメント の場合、実行時例外がスローされます。

    カメラサービスへの接続に失敗した場合(カメラが他のプロセスで使用中であったり、デバイスポリシーマネージャがカメラを無効にしている場合など)

    カメラが他のものに使われていないか、ポリシーマネージャーでカメラがオフになるような設定がされていないか、確認してみましたか?

  3. を忘れないでください。 <uses-feature android:name="android.hardware.camera.autofocus" /> はオートフォーカスのためのものです。

これらのうち、どれが直接的に役立つかどうかはわかりませんが、単純に除外するためという理由だけであれば、調査する価値はあると思います。もしあなたが望むなら、デューデリジェンス。

EDIT 下のコメントにもあるように、解決策として uses-permissions をapplicationタグの上まで上げています。