首先我使用CameraManager.open(cameraid,StateCallbackObject,handler)
使用相机,然后关闭屏幕或切换屏幕以显示手机桌面或其他应用程序,大约1分钟后相机访问被中断并调用onError
中的StateCallbackObject
方法。
如果我保持我的屏幕并保持应用程序显示在屏幕上,它可以继续使用相机而不会中断或错误。
我的问题是:如何在屏幕关闭或应用程序未聚焦后保持相机打开。
摘录代码:
main activity.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();
}
}
camera holder.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);
}
}
}
如果我保持我的屏幕并保持应用程序显示在屏幕上,它可以继续使用相机而不会中断或错误。
你不能。此行为是故意的,后台应用程序无法访问相机和麦克风。您的应用必须保持在前台,以便在Android 9上运行时可以使用这些来源(并且最有可能更新)。
请参阅https://source.android.com/setup/start/p-release-notes上的“隐私和安全”:
隐私增强功能:Android 9以多种新方式保护隐私。现在,当应用程序空闲或在后台运行时,Android将限制对手机麦克风,相机或其他传感器的访问。 (如果某个应用确实需要访问传感器,它会在您的手机上显示持续通知。)Android 9还带来了重要的改进,可以保护所有网络通信并提供私人网上冲浪。