ACTION_IMAGE_CAPTURE and CAMERA feature



我使用ACTION_IMAGE_CAPTURE请求相机应用程序拍照。根据官方文档,如果我的应用程序使用相机功能,但不需要它的正确功能,以下应该留在manifest

<manifest ... >
    <uses-feature android:name="android.hardware.camera"
                  android:required="false" />
    ... 
</manifest>

我真的不明白在清单中有这些行的想法是什么,没有这个而不是所需的功能,这不是一样的吗?

我想知道写这个有什么意义?我可以从清单上跳过这个吗?

如果我有清单中列出的功能并不重要,我仍然可以在运行时检查它,正确的hasSystemFeature(PackageManager.FEATURE_CAMERA) ?

不,不一样。正如医生所说:

元素提供了一个required属性,允许您指定应用程序是否需要而不能在没有声明的特性的情况下运行,或者是否希望具有该特性但可以在没有该特性的情况下运行。

这意味着它将是有这个功能,但应用程序仍然可以工作,没有它。例如,一个可以拍照但不需要它作为其正常操作的一部分的应用程序将使用required=false作为相机。

你可能会通过代码问,是的。但是问题是一些permissions意味着您需要一些特定的硬件:

如果应用程序请求与硬件相关的权限,Google Play假设应用程序使用底层硬件功能,因此需要这些功能,即使可能没有相应的声明。对于这样的权限,Google Play将底层硬件功能添加到它为应用程序存储的元数据中,并为它们设置过滤器。

例如,如果一个应用程序请求CAMERA权限,但没有为android.hardware声明一个元素。Google Play认为应用程序需要一个摄像头,不应该显示给那些设备不提供摄像头的用户。

所以如果你想使用某些功能而不是其他功能,并且你包含权限,你可能想声明你的应用程序不真的需要某个设备功能的存在

From Android docs:

声明的目的是通知任何外部实体的硬件和软件特性的集合上,您的应用程序依赖。

一般来说,你应该确保声明元素,包含应用程序所需的所有特性

<uses-feature android:name="android.hardware.camera"
                  android:required="false" />

如果required = "false"在manifest中给出,则应用程序使用摄像头,但这不是应用程序工作的强制性要求,所有设备都可以从play store安装应用程序,无论设备是否具有摄像头功能。

如果required = "true"在manifest中给出,则具有摄像头功能的设备只能使用应用程序,其他不具有摄像头功能的设备无法从Google play商店安装。

这允许Google Play Store过滤掉不具备所需功能的设备上的应用。

我希望它有帮助!

最新更新