在 Android 11 中,READ_PHONE_STATE 权限似乎被积极拒绝。

3

我有一个应用程序,在 Manifest 文件中具有以下权限:

<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

我在Android 11的手机设置中手动启用了所有权限。但是,如果我使用ActivityCompat.checkSelfPermission(this,(Manifest.permission.READ_PHONE_STATE))检查是否已授予READ_PHONE_STATE权限,则结果始终为PERMISSION_DENIED

然后,我使用ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_PHONE_STATE), 102),这只是调用onRequestPermissionsResult并立即返回PERMISSION_DENIED

我在两台Android 11设备(一个物理设备和一个模拟器)上复现了这个问题,并尝试更改包名、卸载和重新安装应用等操作。

1个回答

6
我了解了出现了什么问题。我所包含的库之一有以下内容:
Library's Manifest
<uses-permission
    android:name="android.permission.READ_PHONE_STATE"
    android:maxSdkVersion="29" />

即使我在应用程序清单中定义了此权限,maxSdkVersion仍然出现在我的应用程序中。 解决方案是从您的应用程序中删除maxSdkVersion属性:
App's Manifest
<uses-permission
    android:name="android.permission.READ_PHONE_STATE"
    tools:remove="android:maxSdkVersion" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接