2015-01-15 38 views
0

我开发了一个android应用程序,它显示来电时的来电者电信位置。我的应用程序在WiFi设备上不兼容

我上传到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" /> 

哪些特定的权限创建问题? 什么是解决方案。

感谢

+0

如果 “显示呼叫方的电信位置上的来电”;不会在无线网络设备上无用,因为他们永远无法接听来电? – Rohit5k2

+0

这是真的,但我想知道它为什么会发生,为了知识的目的。 – user2446474

+0

检查您的清单,如果它说'<使用功能android:name =“android.hardware.telephony”android:required =“true”/>' – Rohit5k2

回答

3

谷歌播放商店根据他们需要的权限和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); 
1

你是正确的怀疑下面...

<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" /> 

某些权限“暗示”的必要性,某些硬件存在。换句话说,与手机相关的权限要求设备具备电话功能(显然)。

您可以使用AndroidManifest.xml中的<uses-feature>元素解决此问题。这允许您指定是否需要'功能'。

看一看的文档<uses-feature-element>

特别是Permissions that Imply Feature Requirements节这也解释了相关<uses-permission>要素的要求。

编辑:一两件事 - 如果一个功能CAN可以使用,但它不是REQUIRED,它是由你在你的代码来检查其可用性尝试使用它,否则你会得到不可预知的结果之前,或可能的异常/崩溃。

相关问题