React Native Android权限弹窗真机不显示 模拟器正常无法下载文件
问题解决方案
- 首先确认你的真机Android系统版本:Android 13(API 33)及以上版本已经废弃了
WRITE_EXTERNAL_STORAGE权限,申请该权限不会弹出任何授权弹窗,这是你模拟器(一般为低版本)正常、真机异常的核心原因。 - 按你的实际业务场景调整权限配置和申请逻辑:
- 如果你的文件只需要保存在应用专属目录(路径为
/Android/data/你的应用包名/下),不需要申请任何存储权限,直接执行文件写入逻辑即可,删除现有存储权限申请相关代码即可正常运行。 - 如果你需要把文件保存到公共存储目录(比如下载、相册目录),按Android版本适配权限:
- Android 13及以上:根据文件类型申请对应权限,图片申请
READ_MEDIA_IMAGES、视频申请READ_MEDIA_VIDEO、音频申请READ_MEDIA_AUDIO、其他类型文件不需要申请权限,直接用MediaStore或者存储访问框架写入即可。 - Android 10-12:除了
WRITE_EXTERNAL_STORAGE权限,还需要在AndroidManifest.xml的<application>标签中添加属性android:requestLegacyExternalStorage="true"开启 legacy 存储模式。
- 如果你的文件只需要保存在应用专属目录(路径为
- 调整后的权限申请代码示例:
const requestAndroidStoragePermission = async () => { if (Platform.OS !== 'android') return true try { let granted const sdkVersion = Platform.Version if (sdkVersion >= 33) { // 按需申请对应媒体权限,这里以图片为例 granted = await PermissionsAndroid.request( PermissionsAndroid.PERMISSIONS.READ_MEDIA_IMAGES ) } else { granted = await PermissionsAndroid.request( PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE, { title: "File access", message: "The app needs files access to download your performance.", } ) } if (granted === PermissionsAndroid.RESULTS.GRANTED) { this.setState({ storagePermission: true, showExportModal: true }) } else { console.log("Files permission denied") } } catch (err) { console.warn(err) } }
- 同步更新
AndroidManifest.xml的权限配置:
<!-- Android 13以下适用 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <!-- Android 13及以上媒体权限,按需添加 --> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" /> <!-- Android 10适配,在application标签下添加 --> <application ... android:requestLegacyExternalStorage="true" ... >
内容的提问来源于stack exchange,提问作者QuentinNpApnl
相关产品推荐
相关产品推荐

