You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native中PermissionAndroid.request始终返回never_ask_again无弹窗求助

解决Android 13(targetSDK 33)中WRITE_EXTERNAL_STORAGE权限请求无弹窗且返回never_ask_again的问题

核心原因

Android 13(API 33)彻底废弃了WRITE_EXTERNAL_STORAGE和READ_EXTERNAL_STORAGE权限,改用细分的媒体权限管理,同时非媒体文件的写入无需申请权限,直接通过系统API或应用专属目录操作即可。

具体解决方案

1. 更新权限请求代码

根据业务需求替换为对应媒体权限,若仅需下载文件,无需申请存储权限,直接使用MediaStore或应用专属目录即可。以下是访问图片媒体的示例代码:

try {
    const granted = await PermissionsAndroid.request(
      PermissionsAndroid.PERMISSIONS.READ_MEDIA_IMAGES,
      {
        title: '媒体存储读取权限',
        message: '应用需要访问图片权限',
      },
    );

    console.log(granted);
    if (granted === PermissionsAndroid.RESULTS.GRANTED) {
      downloadFile();
      console.log('存储权限已授予');
    } else {
      Alert.alert('错误', '存储权限未授予');
    }
  } catch (err) {
    console.log('++++' + err);
  }

2. 修改AndroidManifest.xml配置

移除废弃的存储权限,按需添加媒体权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <!-- 按需添加媒体权限 -->
  <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" />
  <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
  <uses-permission android:name="android.permission.CAMERA"/>
  <application android:name=".MainApplication" android:usesCleartextTraffic="true" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" android:allowBackup="false" android:theme="@style/AppTheme">
    <activity android:name=".MainActivity" android:label="@string/app_name" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode" android:launchMode="singleTask" android:windowSoftInputMode="adjustResize" android:exported="true">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
      </intent-filter>
    </activity>
  </application>
</manifest>

3. 文件下载的权限替代方案

  • 若下载到应用专属目录(/Android/data/你的包名/):直接写入即可,无需任何权限。
  • 若下载到公共媒体目录(如相册、视频文件夹):使用MediaStore API写入,无需申请存储权限。

内容的提问来源于stack exchange,提问作者d3f4u1t3d

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 09:14:56