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

Chr*_*ris 0 permissions android telephony

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

android.permission.READ_PHONE_STATE
Run Code Online (Sandbox Code Playgroud)

所以我可以告诉来电何时进来,这样我就可以在通话过程中静音.我还添加了许可:

android.permission.CALL_PHONE
Run Code Online (Sandbox Code Playgroud)

因此用户可以按图标来拨打电话号码.这些都是微小的变化,并不会影响大多数人使用该应用程序的方式.在我发布之后,我现在拥有的平板电脑没有手机功能的用户无法下载更新,而平板电脑的新用户不再在Play商店中看到它.

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

<uses-feature android:name="android.hardware.telephony" android:required="false">
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在设备上测试应用程序时,我收到此错误:

Caused by: java.lang.SecurityException: Neither user 10022 nor current process has android.permission.READ_PHONE_STATE.
Run Code Online (Sandbox Code Playgroud)

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

Com*_*are 5

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

<uses-feature> 除了权限之外,还可以使用权限,而不是权限.

引用文档:

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

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