Android 13下targetSdk<33时PackageInfo.requestedPermissions返回POST_NOTIFICATIONS异常
问题分析:POST_NOTIFICATIONS权限在不同targetSdk版本下的表现差异
核心原因
这是Android 13(API 33)对通知权限的规则变更导致的,具体差异逻辑如下:
当targetSdk < 33时:
Android 13之前的系统中,应用默认拥有发送通知的权限,无需显式声明<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>。这类低targetSdk的应用运行在Android 13设备上时,系统会自动为其隐式添加该权限,因此调用PackageInfo.requestedPermissions时会返回这个权限。当targetSdk >= 33时:
Android 13开始将POST_NOTIFICATIONS列为危险权限,必须在AndroidManifest.xml中显式声明该权限,才会被计入requestedPermissions列表。如果清单中没有声明,即便系统在运行时可能默认允许通知(取决于设备设置),PackageInfo里也不会包含这个权限。
对应你的场景验证
你的测试项目未添加任何权限声明:
- targetSdk <33时,系统兼容旧逻辑,自动注入该权限到权限列表;
- targetSdk >=33时,由于未显式声明,
requestedPermissions自然为空。
补充说明
如果你的应用targetSdk升级到33+且需要发送通知,必须在清单中添加:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
之后还需在运行时动态申请该权限,用户授权后才能正常发送通知。
内容的提问来源于stack exchange,提问作者Arthur Rousseau
相关产品推荐
相关产品推荐

