React-Native Android 6.0+ 权限申请指南

2 下载量 95 浏览量 更新于2024-09-02 收藏 160KB PDF 举报
"React-Native在Android 6.0及以上版本中的权限申请" 在Android 6.0(API级别23)及更高版本中,针对某些敏感和用户隐私相关的权限,应用不再能在安装时自动获得,而是需要在运行时动态请求用户的许可。这是Google为了增强用户对应用权限控制的举措,让用户更加清楚地了解应用如何使用他们的数据。例如,读取和写入外部存储(SD卡)的权限,就需要在`AndroidManifest.xml`文件中声明,并在运行时通过API向用户询问。 在`AndroidManifest.xml`中,你需要添加以下两行代码来声明读取和写入外部存储的权限: ```xml <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> ``` 然而,如果在`android/app/build.gradle`文件中的`defaultConfig`块中,`targetSdkVersion`设置为23或更高,那么即使在`AndroidManifest.xml`中声明了权限,应用仍然需要在运行时请求用户授权。默认情况下,React-Native初始化的应用可能将`targetSdkVersion`设为22,这可能导致在6.0及以上系统的设备上无法正常获取某些权限。 要解决这个问题,首先需要将`targetSdkVersion`提升到23或以上。然后,React-Native提供了`PermissionsAndroid`模块来帮助开发者动态申请权限。使用`PermissionsAndroid`,即使用户最初拒绝了权限,之后也可以再次请求,而无需每次都提示用户。在申请权限之前,通常会显示一个自定义的对话框,用以解释为何应用需要这些权限,以增加用户接受的可能性。 以下是一个使用`PermissionsAndroid`请求权限的基本示例: ```javascript import { PermissionsAndroid } from 'react-native'; async function requestStoragePermissions() { try { const granted = await PermissionsAndroid.request( PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE, { title: '存储权限', message: '应用需要访问您的外部存储进行文件操作', buttonNeutral: '以后再说', buttonNegative: '取消', buttonPositive: '允许', }, ); if (granted === PermissionsAndroid.RESULTS.GRANTED) { console.log('您已赋予存储权限'); } else { console.log('存储权限请求被拒绝'); } } catch (err) { console.warn(err); } } // 在适当的时候调用这个函数 requestStoragePermissions(); ``` 在低于Android 6.0的设备上,应用会在安装时自动获得在`AndroidManifest.xml`中声明的所有权限,无需运行时请求。因此,当处理兼容性问题时,确保正确处理不同版本Android的权限策略是很重要的。 React-Native在Android 6.0及更高版本中的权限管理要求开发者不仅要声明权限,还需要在代码中动态请求,以便在用户同意后才能使用相应的功能。通过使用`PermissionsAndroid`模块,开发者可以更好地控制和解释权限请求,提高用户体验。