我已经尝试了大多数问题的结果,但没有一个对我有用。我尝试使用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中测试应用程序
2条答案
按热度按时间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
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