首页 > 解决方案 > android,,camera 无法在屏幕关闭或应用程序未聚焦在屏幕上时访问

问题描述

首先我CameraManager.open(cameraid,StateCallbackObject,handler)习惯使用相机,然后我关闭屏幕或切换屏幕以显示手机桌面或其他应用程序,大约1分钟后相机访问被突然并调用 onError方法。StateCallbackObject

如果我保持屏幕打开并保持应用程序显示在屏幕上,它可以继续使用相机而不会中断或错误。

我的问题是:如何在屏幕关闭或应用程序未聚焦后保持相机打开。

代码摘录:

MainActivity.java

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
      callback = new AvailabilityCallback(){
        @Override
        public void onCameraAvailable(String cameraId){
            iscamerafree = true;
        }

        @Override
        public void onCameraUnavailable(String cameraId){
            iscamerafree = false;
        }

      };

      new CameraHolder();
    }
}

CameraHolder.java

public class CameraHolder {
  CameraHolder(){
    while(iscamerafree==true){
      manager.openCamera(cameraid, new CameraDevice.StateCallback() {
         @Override
         public void onOpened(CameraDevice camera) {
           //do some stuff
         }

         @Override
         public void onDisconnected(CameraDevice camera) {}

         @Override
         public void onError(CameraDevice camera, int error) {
            //after screen off or app not focused on screen for 1 min,this is invoked
         }
      },handler);
    }
  }
}

标签: androidandroid-camera2android-9.0-pie

解决方案


如果我保持屏幕打开并保持应用程序显示在屏幕上,它可以继续使用相机而不会中断或错误。

你不能。此行为是故意的,后台应用程序既无法访问摄像头也无法访问麦克风。在 Android 9(很可能也是更新版本)上运行时,您的应用必须保持在前台以便这些资源可用。

请参阅https://source.android.com/setup/start/p-release-notes上的“隐私和安全” :

隐私增强:Android 9 以多种新方式保护隐私。现在,当应用程序空闲或在后台运行时,Android 将限制对手机麦克风、摄像头或其他传感器的访问。(如果应用确实需要访问传感器,它会在您的手机上显示持续通知。)Android 9 还带来了重要的改进,可以保护所有网络通信并提供私人网络冲浪。


推荐阅读