我的应用程序与仅支持 WiFi 的设备不兼容
My App is not compatible on WiFi only devices
我开发了一个 android 应用程序,可以在来电时显示来电者的电信位置。
我在 Google Play 上上传了它,但是这个应用程序没有出现在只有 WiFi 的设备上,它说你的设备不兼容。
我的清单权限详细信息如下。
<uses-permission android:name="android.permission.READ_CALL_LOG"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
我对以下权限有疑问
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
哪些特定权限造成了问题?
解决方法是什么。
谢谢
您对以下的怀疑是正确的...
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
某些权限"imply" 某些硬件存在的必要性。换句话说,与 phone 相关的权限要求设备具有 phone 功能(显然)。
您可以使用 AndroidManifest.xml 中的 <uses-feature>
元素来解决这个问题。这允许您指定是否需要 'feature'。
的文档
特别是 Permissions that Imply Feature Requirements 部分,它解释了与 <uses-permission>
元素相关的要求。
编辑:还有一件事——如果一个功能可以被使用但它不是必需的,则由您来检查在尝试使用它之前它在您的代码中的可用性,否则您将得到不可预测的结果或可能的异常/崩溃。
google Play 商店根据应用程序所需的权限和 android 设备中可用的功能过滤应用程序。因此,您的应用不会出现在仅支持 WiFi 的设备中,因为该应用需要 CALL_PHONE
权限和 MODIFY_STATE_PERMISSION
。
MODIFY_PHONE_STATE
权限不允许您拨打电话,但这意味着电话是一项要求。
来源:https://developer.android.com/guide/topics/manifest/uses-feature-element.html#permissions
因此,您应该使用 <uses-feature>
元素而不是上述权限。
来自文档:您可以通过在元素中使用 android:required="false" 属性显式声明隐含特征来禁用基于隐含特征的过滤。
你的情况:
<uses-feature android:name="android.hardware.telephony" android:required="false" />
但是在实际检查电话功能是否可用之前,您还需要确保不使用任何与电话相关的功能。
在 android 应用程序中,对于 SDK >=5 ,您应该使用:
PackageManager pm = this.getPackageManager();
boolean hasTelephony = pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
我开发了一个 android 应用程序,可以在来电时显示来电者的电信位置。
我在 Google Play 上上传了它,但是这个应用程序没有出现在只有 WiFi 的设备上,它说你的设备不兼容。
我的清单权限详细信息如下。
<uses-permission android:name="android.permission.READ_CALL_LOG"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
我对以下权限有疑问
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
哪些特定权限造成了问题? 解决方法是什么。
谢谢
您对以下的怀疑是正确的...
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
某些权限"imply" 某些硬件存在的必要性。换句话说,与 phone 相关的权限要求设备具有 phone 功能(显然)。
您可以使用 AndroidManifest.xml 中的 <uses-feature>
元素来解决这个问题。这允许您指定是否需要 'feature'。
特别是 Permissions that Imply Feature Requirements 部分,它解释了与 <uses-permission>
元素相关的要求。
编辑:还有一件事——如果一个功能可以被使用但它不是必需的,则由您来检查在尝试使用它之前它在您的代码中的可用性,否则您将得到不可预测的结果或可能的异常/崩溃。
google Play 商店根据应用程序所需的权限和 android 设备中可用的功能过滤应用程序。因此,您的应用不会出现在仅支持 WiFi 的设备中,因为该应用需要 CALL_PHONE
权限和 MODIFY_STATE_PERMISSION
。
MODIFY_PHONE_STATE
权限不允许您拨打电话,但这意味着电话是一项要求。
来源:https://developer.android.com/guide/topics/manifest/uses-feature-element.html#permissions
因此,您应该使用 <uses-feature>
元素而不是上述权限。
来自文档:您可以通过在元素中使用 android:required="false" 属性显式声明隐含特征来禁用基于隐含特征的过滤。
你的情况:
<uses-feature android:name="android.hardware.telephony" android:required="false" />
但是在实际检查电话功能是否可用之前,您还需要确保不使用任何与电话相关的功能。
在 android 应用程序中,对于 SDK >=5 ,您应该使用:
PackageManager pm = this.getPackageManager();
boolean hasTelephony = pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY);