2

実際のデバイスを使用して、 Camera2 APIを介して前面カメラにアクセスしようとしています。

しようとすると問題が発生します

cameraManager.openCamera(..,..,..)

try {
        CameraCharacteristics characteristics = manager.getCameraCharacteristics(mCameraID);
            if (!mCameraOpenCloseLock.tryAcquire(2500, TimeUnit.MILLISECONDS)) {
                throw new RuntimeException("Time out waiting to lock camera opening.");
            }
            manager.openCamera(mCameraID, mStateCallback, mBackgroundHandler);
        } catch (CameraAccessException e) {
            Log.e("mr", "OpenCamera - Camera Access Exception");
        } catch (IllegalArgumentException e) {
            Log.e("mr", "OpenCamera - Illegal Argument Exception");
        } catch (SecurityException e) {
            e.printStackTrace();
            Log.e("mr", "OpenCamera - Security Exception:");
        } catch (InterruptedException e) {
            Log.e("mr", "OpenCamera - Interrupted Exception");
        }

カメラマン曰く

I/CameraManagerGlobal: カメラ サービスへの接続

このCameraManager.java関数から来ています

private void connectCameraServiceLocked() {
            // Only reconnect if necessary
            if (mCameraService != null) return;

            Log.i(TAG, "Connecting to camera service");

その後、私のGLSurfaceViewは空白のままです

AndroidMainfest.xml

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.google.android.permission.PROVIDE_BACKGROUND" />

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

PS:

  • バックカメラで動作します
  • nexus 6 API 23エミュレーターで動作します
  • Android M の実行時にアクセス許可が要求される
  • ビューファインダーとしてGLSurfaceViewを使用しています
  • フロントカメラは、TextureView で通常の CameraAPI を使用して、同じデバイスで完全に機能していまし
  • アンインストール/再起動/キャッシュのクリアを試みました
  • 使用しているデバイスは、Sony Z5 プレミアムです

Android API 21以降でOpenGL ES 2.0を使用してカメラプレビューをレンダリングするこの例を使用しています

4

3 に答える 3

1

その例をコピーしているだけなら、次の行があることに気付きました。

mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);

フロントカメラにはフラッシュがない可能性が高いため、おそらくそれをサポートしていません. どの AE モードが実際にサポートされているかを確認する必要があります。デバイスが実際にサポートしているものを確認していないサンプル セットの他のさまざまな設定についても同じことが言えます。

つまり、値が悪い場合はエラーが発生するはずですが、CameraCaptureSession.CaptureListener.onCaptureFailed で発生している可能性があり、サンプルはそれらをリッスンしていません。独自のアプリのログだけでなく、すべてのログを見ると、おそらくカメラ サービスからの logcat もあるでしょう。

ただし、その行を削除してみて、機能するかどうかを確認してください。

于 2016-06-03T00:59:03.547 に答える