android - validateClientPermissionsLocked : Caller "package" cannot open camera "1" from background'

标签 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 中调用。

最佳答案

Android 文档 says :

Foreground Services Requirement - When does your app interact with the camera? On Android 9 (API level 28) and later, apps running in the background cannot access the camera. Therefore, you should use the camera either when your app is in the foreground or as part of a foreground service.


因此,如果您希望能够在后台与相机进行交互,您需要通过所谓的“前台服务”来进行,该服务基本上是一个带有通知的后台服务,该通知告诉用户它何时处于 Activity 状态并具有持久性通知。见foreground service documentation举些例子。

关于android - validateClientPermissionsLocked : Caller "package" cannot open camera "1" from background',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54020430/

相关文章:

java - 无法在 onPostExecute 中更新 android listview

java - Android 最佳实践 - 重构一个大的 Activity 类

android - 根上的 Firebase 引用查询

Android Activity 太忙无法设置 TextView 文本?

android - 更改 Actionbar 中搜索的图标

android - 如何提高 Android/iOS/etc 使用 web 服务的性能?

java - onConfigurationChanged 不会避免方向更改时 Activity 重新启动

java - 错误 E/BitmapFactory:无法解码流:java.io.FileNotFoundException::open failed:ENOENT(没有这样的文件或目录)

java - 安卓 : Storing ExtendedProperties on Exchange Server

java - 在 android 中将 contentView 设置为 Web View 后返回到 Activity contentView