PermissionAndroid.request()始终返回never_ask_again,且不显示任何提示,React Native

cyvaqqii  于 2023-05-27  发布在  Android
关注(0)|答案(2)|浏览(297)

我已经尝试了大多数问题的结果,但没有一个对我有用。我尝试使用PermissionAndroid.request方法访问WRITE_EXTERNAL_STORAGE权限,但结果总是返回never_ask_again。
我的请求文件:

try {
        const granted = await PermissionsAndroid.request(
          PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
          {
            title: 'External Storage Write Permission',
            message: 'App needs write permission',
          },
        );

        console.log(granted);
        if (granted === PermissionsAndroid.RESULTS.GRANTED) {
          // Start downloading
          downloadFile();
          console.log('Storage Permission Granted.');
        } else {
          // If permission denied then show alert
          Alert.alert('Error', 'Storage Permission Not Granted');
        }
      } catch (err) {
        // To handle permission related exception
        console.log('++++' + err);
      }
    }

这是我的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.WRITE_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  <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>

请帮助我解决这个问题。先谢了。
编辑:targetSDK版本:33尝试在Android 13中测试应用程序

j8yoct9x

j8yoct9x1#

这可能是Android上权限流的预期结果。
从Android 11开始,如果用户在设备上安装应用的生命周期内多次点击拒绝特定权限,则在应用再次请求该权限时,用户不会看到系统权限对话框。用户的动作暗示“不要再问了”。
摘自https://developer.android.com/about/versions/11/privacy/permissions#dialog-visibility
react-native-permission有一个很好的权限流程图:https://github.com/zoontek/react-native-permissions#android-flow

js5cn81o

js5cn81o2#

当你在API级别33(Android 13)中检查代码时,你必须跳过检查并要求API级别33的WRITE_EXTERNAL_STORAGE权限,因为新的Android版本已经引入了存储访问限制并提供安全的方式来访问数据。如果没有必要向用户显示数据,建议始终将数据写入应用程序目录(缓存目录)。有关存储更改的更多信息,请参阅此文档
友情链接:
https://developer.android.com/about/versions/11/privacy/storage
https://developer.android.com/training/data-storage/shared/media
https://stackoverflow.com/a/74296799/5696047

相关问题