ReactNative 和 PermissionsAndroid 0.71 与 0.70:POST_NOTIFICATION 与 POST_NOTIFICATIONS 和 IllegalArgumentException

Ted*_*Ted 7 permissions android react-native

在https://reactnative.dev/docs/0.70/permissionsandroid上,它显示此权限适用于版本 0.70:

POST_NOTIFICATION: 'android.permission.POST_NOTIFICATION'
Run Code Online (Sandbox Code Playgroud)

https://reactnative.dev/docs/permissionsandroid(版本 0.71)上,它显示相同的权限在末尾带有“S”:

POST_NOTIFICATIONS: 'android.permission.POST_NOTIFICATIONS'
Run Code Online (Sandbox Code Playgroud)

这是拼写错误吗?

在任何一种情况下,如果我使用上述任何一种,应用程序都会崩溃

IllegalArgumentException:权限为 null 在 android.app.ContextImpl.checkSelfPermission(ContextImpl.java:2222) 在 android.content.ContextWrapper.checkSelfPermission(ContextWrapper.java:931) 在 com.facebook.react.modules.permissions.PermissionsModule.requestPermission( PermissionsModule.java:105) 在 java.lang.reflect.Method.invoke(Method.java)

这样做时:

async requestPermission() {
    try {
      const granted = await PermissionsAndroid.request(
        PermissionsAndroid.PERMISSIONS.POST_NOTIFICATION, // or POST_NOTIFICATIONS
        {
          'title': 'TEST',
          'message': I18n.t('permissions.locationPermissionMessage')
        }
      )
      if (granted === PermissionsAndroid.RESULTS.GRANTED) {
        
      } else {
      }
    } catch (err) {
     
    }
  }
Run Code Online (Sandbox Code Playgroud)

权限在AndroidManifest文件中,已确认。

更新

在build.gradle中设置compileSdkVersion = 33和targetSdkVersion = 33:

在此输入图像描述

requestPermission 的代码看起来不像(我使用的是 0.70.5):

在此输入图像描述

崩溃记录如下:

在此输入图像描述

Moh*_*mad 10

根据源代码,是的,这是一个已修复的拼写错误0.71.*,另请参阅此拉取请求以了解更多详细信息。

但关于崩溃,与常量中的拼写错误无关。首先确保使用编译sdk版本33。并为等于或大于 13(API_LEVEL 33) 的 android 获取此权限

为了在 js 端检查 ANDROID_API_LEVEL 使用DeviceInfo

async requestPermission() {
    try {
      const granted = await PermissionsAndroid.request(
        PermissionsAndroid.PERMISSIONS.POST_NOTIFICATION, // or POST_NOTIFICATIONS
        {
          'title': 'TEST',
          'message': I18n.t('permissions.locationPermissionMessage')
        }
      )
      if (granted === PermissionsAndroid.RESULTS.GRANTED) {
        
      } else {
      }
    } catch (err) {
     
    }
}

// where you need to get permission
if (Platform.OS == 'android' && DeviceInfo.getApiLevelSync() >= 33) {
   await requestPermission();
}
Run Code Online (Sandbox Code Playgroud)