使用特性 android:required="false" 被忽略了。

5
在我的AndroidManifest.xml文件中,我有这两行代码:
<uses-permission                        android:name="android.permission.CAMERA" />
<uses-feature android:required="false"  android:name="android.hardware.camera" />

但是当我上传到Google Play时,它指出需要相机。如果我使用aapt工具,它会显示:"uses-feature:name='android.hardware.camera'"

有人知道为什么它忽略了我的代码并要求设备有相机吗?

编辑:以下是我整个“uses”部分的参考:

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

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

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

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

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

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

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

<uses-permission                        android:name="android.permission.VIBRATE" />
<uses-feature android:required="false"  android:name="android.hardware.vibrate" />

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

<uses-permission                        android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission                        android:name="asn.apps.asncrm.permission.C2D_MESSAGE" />
<uses-permission                        android:name="com.google.android.c2dm.permission.SEND" />
<uses-permission                        android:name="android.permission.WAKE_LOCK" />

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

你为什么想要在没有相机硬件的情况下请求相机权限? - Niko Adrianus Yuwono
应用程序中有一个区域,用户可以打开相机拍照。但这是可选的,不需要此功能也可以正常运行应用程序。 - JeffT
虽然这不会解决你的问题,但是你应该使用android.hardware.camera2,因为在API 21中,android.hardware.camera已被弃用。http://developer.android.com/reference/android/hardware/Camera.html - Melvin
你的最低SDK是多少? - Ilario
最低SDK版本15 目标SDK版本22 - JeffT
你的大部分<uses-feature>元素都是虚假的。你不能随意发明新的功能名称,比如android.hardware.INTERNET。因此,首先要删除无效的<uses-feature>元素,限制自己使用实际存在的元素,看看是否有所帮助。我刚在Android Studio 1.4.1中创建了一个简单的项目,将你清单片段的前四行添加到项目的清单中,然后aapt dump badging显示这些功能不是必需的。 - CommonsWare
2个回答

8
尝试在您的Android清单中添加此附加标签:
<uses-feature android:required="false"  android:name="android.hardware.camera.autofocus" />

这是因为根据文档所述,android.permission.CAMERA 权限需要以下 2 个功能: android.hardware.cameraandroid.hardware.camera.autofocus

[编辑]

此外,如果您的清单中有任何 <uses-library> 标签,则其中一个库可能需要相机功能。


谢谢回复。我已经将其添加到其中,并编辑了我的答案,以提供androidmanifest.xml中“Uses”部分的其余内容。 - JeffT
1
你的清单文件中是否有任何<uses-library>标签?如果有的话,其中一个库可能需要相机功能。 - cybersam
我觉得你在这方面有点眉目了 - 我正在引用PDF417.mobi的类。如果他们以某种方式使相机成为必需,是否有办法覆盖它? - JeffT
我不知道有没有这样的方法;如果有一种方法可以覆盖库的要求,那么这将使库变得不可靠,并可能导致应用程序崩溃,我会感到惊讶。 - cybersam
我所引用的库是一个 .aar 文件。我成功地解压了 .aar 文件并编辑了它们的 AndroidManifest.xml 文件,并在相机行中添加了 android:required="false"。然后重新压缩文件并重新构建项目,这解决了我的问题。 - JeffT

0
在我的应用程序中,我想要覆盖相机权限,即使设备没有相机也能使用该应用。我在清单文件中声明了以下权限。我已经验证过,在没有相机的设备上,应用程序可以在应用商店中使用。
不确定这是否能帮助你解决问题(因为你提到使用了第三方库),但请试一试并告诉我。
<uses-permission android:name="android.permission.CAMERA" />

<uses-feature
    android:name="android.permission.CAMERA"
    android:required="false" /> // this is the one I have extra, please add and test

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接