2014-01-21 51 views
0

我有一個播放音頻的應用程序。我最近添加的權限:如何使用Android權限並將其設置爲不具備該功能的設備

android.permission.READ_PHONE_STATE 

,所以我可以當一個呼叫進來,所以我可以靜音通話時的音量說。我還添加了權限:

android.permission.CALL_PHONE 

所以用戶可以按一個圖標來撥打一個電話號碼。這些只是微小的變化,並不影響大多數人使用該應用程序的方式。發佈後,我現在擁有平板電腦沒有手機功能的用戶無法下載更新,並且新用戶在平板電腦上再也看不到該平板電腦。

我看了幾個職位有關清單,而不是權限,使用這樣的:

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

但是,當我嘗試測試設備上的應用程序,我得到這個錯誤:

Caused by: java.lang.SecurityException: Neither user 10022 nor current process has android.permission.READ_PHONE_STATE. 

不任何人都有關於如何將這些次要功能添加到應用程序而不疏遠所有非電話用戶的建議?

回答

5

I read several posts about using this in the manifest instead of the permissions

您使用<uses-feature>除了的權限,而不是替代的權限。

報價the documentation

For any of the permissions below, you can disable filtering based on the implied feature by explicitly declaring the implied feature explicitly, in a element, with an android:required="false" attribute.

所以,加回您的權限。然後,在運行時使用PackageManagerhasSystemFeature(),查看設備是否有android.hardware.telephony,以便您可以根據需要做出反應。

+0

感謝提供電話功能。將兩者都放在清單中,然後更改代碼以檢查設備是否具有電話功能。 – Chris

0

由於@CommonsWare建議使用下面的代碼來檢查設備是否有使用PackageManager

PackageManager pm = getBaseContext().getPackageManager(); 
pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY); 
相關問題