如何使用Android权限并使其对于没有该功能的设备可选

时间:2014-01-21 18:35:19

标签: android permissions telephony

我有一个播放音频的应用。我最近添加了许可:

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.

有没有人建议如何在不疏远所有非电话用户的情况下将这些次要功能添加到应用中?

2 个答案:

答案 0 :(得分:5)

  

我在清单中读了几篇关于使用它的帖子而不是权限

除了权限外,您还使用<uses-feature> ,而不是权限。

引用the documentation

  

对于以下任何权限,您可以通过在元素中使用android:required =“false”属性显式声明隐含功能来禁用基于隐含功能的过滤。

因此,请添加您的权限。然后,在运行时使用PackageManagerhasSystemFeature()来查看设备是否有android.hardware.telephony,以便您可以根据需要做出反应。

答案 1 :(得分:0)

由于@CommonsWare建议使用以下代码检查设备是否具有使用PackageManager提供的电话功能

 PackageManager pm = getBaseContext().getPackageManager();
 pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY);