Reputation: 6624
I've been trying to write a file in Android using RNFS (react-native-fs), but I keep getting the following error :
Permission Denial: writing com.android.providers.media.MediaDocumentsProvider uri content://com.android.providers.media.documents/document/image%3A1000004616 from pid=8769, uid=10304 requires android.permission.MANAGE_DOCUMENTS, or grantUriPermission()
This is my approach :
// write the file
RNFS.writeFile('content://com.android.providers.media.documents/document/image%3A1000004621', '/storage/emulated/0/Documents/my_app_folder/my_image.jpg', 'base64')
.then(success => {
console.log('FILE WRITTEN!');
})
.catch(err => {
console.log(err.message);
});
I have the following permisstions enabled :
try {
PermissionsAndroid.requestMultiple([
PermissionsAndroid.PERMISSIONS.ACCESS_MEDIA_LOCATION,
PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
PermissionsAndroid.PERMISSIONS.READ_MEDIA_IMAGES,
PermissionsAndroid.PERMISSIONS.READ_MEDIA_VIDEO,
PermissionsAndroid.PERMISSIONS.READ_MEDIA_AUDIO,
]).then(result => {
if (
result['android.permission.ACCESS_MEDIA_LOCATION'] &&
result['android.permission.READ_EXTERNAL_STORAGE'] &&
result['android.permission.WRITE_EXTERNAL_STORAGE'] &&
result['android.permission.READ_MEDIA_IMAGES'] &&
result['android.permission.READ_MEDIA_VIDEO'] &&
result['android.permission.READ_MEDIA_AUDIO'] === 'granted'
) {
console.log('SUCCESS! Permissions Granted!');
} else if (
result['android.permission.ACCESS_MEDIA_LOCATION'] ||
result['android.permission.READ_EXTERNAL_STORAGE'] ||
result['android.permission.READ_MEDIA_IMAGES'] ||
result['android.permission.READ_MEDIA_VIDEO'] ||
result['android.permission.READ_MEDIA_AUDIO'] === 'never_ask_again'
) {
console.log(
'Please Go into Settings -> Applications -> APP_NAME -> Permissions and Allow permissions to continue',
);
}
});
} catch (err) {
console.warn(err);
}
Manifest.xml :
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />
<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"
Where am I going wrong?
Thank you all in advance.
Upvotes: 1
Views: 1402
Reputation: 3067
As far as I know, RNFS still have problems with SAF support https://github.com/itinance/react-native-fs/issues/926
A working solution is to use library like this https://github.com/ammarahm-ed/react-native-scoped-storage.
And an explanation why it happened https://blog.notesnook.com/scoped-storage-in-react-native/
Upvotes: 0