Android模拟器中PermissionsAndroid请求通知权限始终返回denied求助
解决POST_NOTIFICATIONS权限请求始终返回Denied的问题
1. 确认模拟器的Android版本
POST_NOTIFICATIONS是**Android 13(API 33)**新增的权限,在低于API 33的系统上,该权限无需动态请求(默认自动授予)。如果你的模拟器系统版本低于API 33,调用PermissionsAndroid.request请求该权限时,系统会直接返回DENIED——因为系统不识别这个权限。
解决:将模拟器切换到API 33或更高版本的Android系统镜像。
2. 检查React Native版本兼容性
旧版本React Native(如0.70以下)的PermissionsAndroid模块未内置POST_NOTIFICATIONS权限常量,且可能存在请求逻辑兼容问题:
- 若RN版本≥0.71,建议直接使用官方提供的常量替代字符串:
const granted = await PermissionsAndroid.request( PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS, { title: "MyApp notifications Permission", message: "MyApp needs your permission to send you notifications.", buttonNeutral: "Ask Me Later", buttonNegative: "Cancel", buttonPositive: "OK", }, );
- 若RN版本较低,需先判断系统版本再处理权限:
import { Platform } from 'react-native'; const requestNotificationPermission = async () => { try { // 仅在Android 13+(API 33)请求权限 if (Platform.OS === 'android' && Platform.Version >= 33) { const granted = await PermissionsAndroid.request( "android.permission.POST_NOTIFICATIONS", { title: "MyApp notifications Permission", message: "MyApp needs your permission to send you notifications.", buttonNeutral: "Ask Me Later", buttonNegative: "Cancel", buttonPositive: "OK", }, ); console.log("granted", granted); if (granted === PermissionsAndroid.RESULTS.GRANTED) { dispatch({ type: "NOTIFICATIONS_STATUS", value: true, }); } else { console.log("Notifications permission denied"); } } else { // Android 12及以下,权限默认授予 dispatch({ type: "NOTIFICATIONS_STATUS", value: true, }); } } catch (err) { console.warn(err); } };
3. 验证AndroidManifest.xml的权限声明
确保<uses-permission>标签放在<manifest>根标签内,而非<application>标签中:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 正确的权限声明位置 --> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
4. 明确弹窗按钮的返回逻辑
- 点击「OK」:正常应返回
PermissionsAndroid.RESULTS.GRANTED,若仍返回DENIED,请检查上述1-3步骤。 - 点击「Ask Me Later」:返回
PermissionsAndroid.RESULTS.DENIED是符合预期的,该按钮作用为暂时拒绝权限,而非授予。
内容的提问来源于stack exchange,提问作者Mohamed Aarab
相关产品推荐
相关产品推荐

