如果设备没有摄像头,我想在我的应用程序中禁用摄像头功能.然而,我这样做的时候似乎遇到了一个错误.

根据Android开发者官方文档,我可以使用hasSystemFeature()在运行时检测设备功能,如下所示:

boolean hasAnyCamera = this.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY);
Log.i(LOG_TAG, "hasAnyCamera = " + hasAnyCamera);

boolean hasBackCamera = this.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA);
Log.i(LOG_TAG, "hasBackCamera = " + hasBackCamera);

然而,我试图创建一个没有正面或背面摄像头的仿真器,但两次判断都返回true.有没有其他方法可以在Android中检测摄像头?

相关文件:

AVD Manager, device with camera front and back set to

推荐答案

After some research, it appears that this is a known bug, which has been unresolved for 10+ years now.

见:Emulator does not honour Camera support flag

似乎唯一已知的解决方法是使用Camera.getNumberOfCameras()方法检测摄像头的数量,自Android 5.0以来,这种方法一直被弃用.

boolean hasCamera = Camera.getNumberOfCameras() > 0;
Log.i(LOG_TAG, "hasCamera = " + hasCamera);

上述方法似乎在我的emulator上有效,尽管有警告称它已被弃用.


现在根据Camera.getNumberOfCameras()年的文件:

"如果设备支持外部摄像头,并且连接或断开了外部摄像头,[getNumberOfCameras()]的返回值可能会动态更改."

因此,也许hasSystemFeature()总是返回true,因为该设备以后可能会连接外部摄像头?

Java相关问答推荐

在applitcation.properties中找到的字符串中输入变量

如何使用解析器组合子解析Java数组类型签名?

Java 21虚拟线程会解决转向react 式单线程框架的主要原因吗?

如何在Docker容器中使用wireock—Webhooks阻止请求?

当我用OkHttpClient重写shouldInterceptRequest来发布数据时,Android WebView正在以纯HTML加载URL内容

从技术上讲,OPC UA客户端是否可以通过转发代理将请求通过 tunel 发送到OPC UA服务器?

Junit with Mockito for java

使用动态ID从json获取详细信息的Jolt规范

Java .类参数不通过构造函数传递

无法处理批处理侦听器中的反序列化异常

Java:使用Class.cast()将对象转换为原始数组

把一条整型短裤和两条短裤装成一条长的

Jolt变换JSON数组问题

声明MessageChannel Bean的首选方式

使用存储在字符串变量中的路径目录打开.pdf文件

如何在Java中为thunk创建映射器函数

在整数列表中查找和可被第三个整数整除的对时出现无法解释的RunTimeError

如何使用Hibernate v6.2构建NamingStrategy,以表名作为所有列的前缀?

spring 数据Elastic search 与 spring 启动数据Elastic search 之间的区别是什么?

如何显示新布局