2015-10-19 53 views
0

我的应用程序从手机收集诊断数据。当然,它需要像android.permission.ACCESS_WIFI_STATE这样的权限来访问硬件。因此,Android假定android.hardware.WIFI功能是必需的。尽管在大多数情况下这确实是一个有效的猜测,但在我的情况下,Wi-Fi并不是真正需要的正常操作。该应用程序检查实际存在的模块,如果Wi-Fi不在那里,它只会跳到下一个模块。为什么在AndroidManifest中声明为可选的特性仍然需要?

继文档,我在AndroidManifest宣布

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

。不幸的是,它不能按预期工作!该功能仍按要求列出。

这里是豁免aapt检查。

uses-feature-not-required: name='android.hardware.WIFI' 
    uses-feature: name='android.hardware.wifi' 
    uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission' 

有谁知道如何使该功能是可选的:虽然我的声明有一个初步的效果,它立刻被许可重写?非常感谢你的帮助,伙计们!


UPDATE:解决方案

感谢CommonsWare的答案,这个问题的确在我的声明(捂脸)上的情况。

坏:

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

好:

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

与下壳一切正常记录。

现在,最令人沮丧的是:我是如何以大写字母结尾的? - 我只是从Google Play列表中复制它。所以,大家,在那里检查时要小心。你通常做什么? - 您构建APK,将其上传到Google Play,然后检查版本/权限/功能 - NOPE,这就是陷阱!你在那里看到大写字母。不要因此而失望:)

+0

这是一个真正的问题吗?我的意思是有没有WiFi的设备? – tyczj

+0

Wi-Fi只是其中之一。该应用程序探测各种模块,例如GPS,Wi-Fi,蓝牙,NFC,键盘等。基本上,每一个可能的硬件。如果有的话,很少有装有*全部*的装置。拥有所有权限拖动关联的功能将缩小设备过滤器的大小,以便Play Store中的“支持:0设备”。 *那就是问题所在。 – JBM

回答

2

Android与许多操作系统一样,区分大小写。尝试:

<uses-feature android:required="false" android:name="android.hardware.wifi"/> 
相关问题