validateClientPermissionsLocked:调用者“程序包”无法从后台打开摄像机“ 1”

时间:2019-01-03 10:27:34

标签: android android-activity

在后台运行应用程序时尝试从前置摄像头捕获照片。

我在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)

在从JobService调用的Activity中调用代码。

1 个答案:

答案 0 :(得分:1)

Android文档says

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

因此,如果您希望能够在后台与摄像头进行交互,则需要通过所谓的“前台服务”进行操作,该服务本质上是一种后台服务,具有通知功能,可在活动时通知用户带有持久性通知。有关示例,请参见foreground service documentation