谷歌应用商店上没有适用于Nexus 7的应用程序。

13
我知道Nexus 7上有相机功能,因此我更改了清单文件,将权限设置为不必要,如下所示:
<uses-permission android:name="android.permission.CAMERA" android:required="false"/>

该应用程序仍然不可用。此时我对文档中关于uses-feature而非user-permission的讨论感到困惑:

  

请注意,您声明(或暗示)需要运行应用程序的系统功能,否则Play商店将不会使您的应用程序面向Nexus 7用户。始终将非关键硬件功能声明为required="false",然后在运行时检测该功能是否存在,并逐步增强功能。

这里是怎么回事?我对功能和权限之间的区别感到困惑。


你的清单中有<uses-feature/>标签吗?<uses-permission/>没有必需的字段。http://developer.android.com/guide/topics/manifest/uses-permission-element.html - auselen
我在我的清单文件中没有使用标签<user-feature/>。 - gwvatieri
你在上传到Google Play之前是否添加了<uses-permission/>?这可能是原因。uses-permission没有必需的标签,因此可能是Manifest准备为您请求的相机权限(应该在应用程序信息中可见)。 - auselen
1个回答

22

uses-feature声明应用程序使用的硬件/软件类型。您可以使用此功能自动缩小其出现设备的类型范围。如果应用程序无需这些功能就能继续运行,并设计了处理功能不可用的情况(例如像您提到的Nexus 7一样),则可以将其中任何一个功能声明为可选。

uses-permission声明应用程序被允许使用的功能类型。如果您声明了权限,就会使用户知道“嘿,这个应用程序被允许使用我的相机”,他们可以决定是否批准该使用。您无法将权限标记为可选。

相反,您应该在uses-permission标签中留下required属性,并添加另一个标签来使用相机uses-feature,并在该标签中将其标记为required = "false",例如:

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

编辑: 读取该文档后,似乎还需要添加:

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

由于相机权限涵盖了这两个特性的需求,因此可能无需此额外标签即可工作,但为了以防万一,过度特定可能更好。


好的,我明白了,谢谢。 (我希望ADT在您未正确使用标签时发出警告,这样我就不必再次发布应用程序了) - gwvatieri
我其实很惊讶它以那种方式编译通过了。可能没有内置检查某些清单标签或其他东西?不确定,但希望这能解决你的问题。 :) - Kevin Coppock
是的,我也感到惊讶。在 Google Play 上有一个工具,可以根据 APK 和设备告诉你可用/不可用,如果不可用,还可以告诉原因,这将是非常好的。现在,我只能在发布应用后再发现问题 :-)。再次感谢。 - gwvatieri
4
一旦您上传了APK,我认为您可以查看它可用和不可用的设备,但我绝对同意,令人恼火的是他们没有告诉您为什么某个设备无法使用。 - Kevin Coppock

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