android - 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);
}
}
}
解决方案
如果我保持屏幕打开并保持应用程序显示在屏幕上,它可以继续使用相机而不会中断或错误。
你不能。此行为是故意的,后台应用程序既无法访问摄像头也无法访问麦克风。在 Android 9(很可能也是更新版本)上运行时,您的应用必须保持在前台以便这些资源可用。
请参阅https://source.android.com/setup/start/p-release-notes上的“隐私和安全” :
隐私增强:Android 9 以多种新方式保护隐私。现在,当应用程序空闲或在后台运行时,Android 将限制对手机麦克风、摄像头或其他传感器的访问。(如果应用确实需要访问传感器,它会在您的手机上显示持续通知。)Android 9 还带来了重要的改进,可以保护所有网络通信并提供私人网络冲浪。
推荐阅读
- spring-boot - 使用 JWT 身份验证登录时堆栈溢出
- c++ - 在 Visual C++ 应用程序中添加外部 C 库 - “错误 LNK2028”和“错误 LNK2019”
- django - 如何创建生成/计算列 Postgres/DJANGO?
- python - 如何从运行在 QThread 中的服务器捕获信号
- php - PDO - 根据用户国家更改日期和时间的显示格式
- c# - 如何监听数据库的变化?
- react-native-navigation - react-native-navigation 中顶部栏菜单操作的样式选项
- windows - __appdir__ 在 cmd.exe 和 Start > Run 之间是不同的
- java - 将 Kafka 连接的状态传播到就绪执行器指示器
- python-3.x - 使用函数读取和写入文件