READ_PHONE_STATE 权限似乎在 Android 11 中被主动拒绝

READ_PHONE_STATE permission seems to be actively rejected in Android 11

我在清单中有一个具有以下权限的应用程序:

<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 台设备(一台物理设备,一台模拟器)上复制了这个,我尝试更改包名称,卸载并重新安装应用程序等。

我知道出了什么问题。我包括的图书馆之一有这个:

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" />