2015-01-15 63 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,它是由你在你的代碼來檢查其可用性嘗試使用它,否則你會得到不可預知的結果之前,或可能的異常/崩潰。

相關問題