validate客户端权限已锁定:调用方"package"无法从后台打开相机"1""



当应用程序处于后台时,尝试从前置摄像头捕获照片。

我有以下代码在 Android 6 及更低版本中工作。

Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
cameraCount = Camera.getNumberOfCameras();
for (int camIdx = 0; camIdx < cameraCount; camIdx++) {
    Camera.getCameraInfo(camIdx, cameraInfo);
    if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
        myCamera = Camera.open(camIdx);
    }
}

这仅适用于 Android 7 及更高版本,前提是应用位于前台。如果应用程序在后台运行,则会显示以下错误:

W/CameraBase: An error occurred while connecting to camera 1: Status(-8): '6: validateClientPermissionsLocked:915: Caller "packagename" (PID 10152, UID 32606) cannot open camera "1" from background'
W/System.err: java.lang.RuntimeException: Fail to connect to camera service
W/System.err:     at android.hardware.Camera.<init>(Camera.java:546)
W/System.err:     at android.hardware.Camera.open(Camera.java:392)
W/System.err:     at com.tracking_smartphone.TakePictureActivity.takePictureNoPreview(TakePictureActivity.java:77)
W/System.err:     at com.tracking_smartphone.TakePictureActivity.onCreate(TakePictureActivity.java:46)
W/System.err:     at android.app.Activity.performCreate(Activity.java:7144)
W/System.err:     at android.app.Activity.performCreate(Activity.java:7135)
W/System.err:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
W/System.err:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2894)
W/System.err:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3049)
W/System.err:     at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
W/System.err:     at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
W/System.err:     at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1809)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:106)
W/System.err:     at android.os.Looper.loop(Looper.java:193)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6680)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

该代码在从作业服务调用的活动中调用。

Android 文档说:

前台服务要求 - 应用何时与相机交互?在 Android 9(API 级别 28)及更高版本上,在后台运行的应用无法访问相机。因此,当应用位于前台或作为前台服务的一部分时,应使用相机。

因此,如果您希望能够在后台与相机进行交互,则需要从所谓的"前台服务"进行交互,该服务基本上是一个带有通知的后台服务,该通知会告诉用户何时通过持久通知处于活动状态。有关示例,请参阅前台服务文档。

最新更新