Reputation: 141
Image_picker => Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/file from pid=18506, uid=10259 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission()
I already given permission in AndroidManifest like below....
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
I am using One Plus 3t Device with android version 9, Oxygen OS version 9.0.6...
Steps to Reproduce
I am getting error with the below code...
final PickedFile? pickedFile = await _picker.getImage(
source: ImageSource.camera,
maxWidth: 400,
);
Expected results: It suppose to ask write permission if it is needed or return PickedFile object.. However it asks camera permission for the first time... if you give access, it loads the camera, allow you to take picture... Once you taken the picture, you get following error...
Actual results:
Error
W/Binder (18506): Caught a RuntimeException from the binder stub implementation. W/Binder (18506): java.lang.SecurityException: Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/file from pid=18506, uid=10259 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission() W/Binder (18506): at android.os.Parcel.createException(Parcel.java:1950) W/Binder (18506): at android.os.Parcel.readException(Parcel.java:1918) W/Binder (18506): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183) W/Binder (18506): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135) W/Binder (18506): at android.content.ContentProviderProxy.delete(ContentProviderNative.java:561) W/Binder (18506): at android.content.ContentResolver.delete(ContentResolver.java:1813) W/Binder (18506): at android.media.MediaScannerConnection$1.scanCompleted(MediaScannerConnection.java:83) W/Binder (18506): at android.media.IMediaScannerListener$Stub.onTransact(IMediaScannerListener.java:61) W/Binder (18506): at android.os.Binder.execTransact(Binder.java:752) W/Binder (18506): Caught a RuntimeException from the binder stub implementation. W/Binder (18506): java.lang.SecurityException: Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/file from pid=18506, uid=10259 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission() W/Binder (18506): at android.os.Parcel.createException(Parcel.java:1950) W/Binder (18506): at android.os.Parcel.readException(Parcel.java:1918) W/Binder (18506): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183) W/Binder (18506): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135) W/Binder (18506): at android.content.ContentProviderProxy.delete(ContentProviderNative.java:561) W/Binder (18506): at android.content.ContentResolver.delete(ContentResolver.java:1813) W/Binder (18506): at android.media.MediaScannerConnection$1.scanCompleted(MediaScannerConnection.java:83) W/Binder (18506): at android.media.IMediaScannerListener$Stub.onTransact(IMediaScannerListener.java:61) W/Binder (18506): at android.os.Binder.execTransact(Binder.java:752)
Upvotes: 0
Views: 1987
Reputation: 174
ask permission in run-time,you can use permission_handler package from pub(https://pub.dev/packages/permission_handler) for that like
_requestPermission(Permission permission) async {
if (await permission.isGranted) {
return true;
} else {
var result = await permission.request();
if (result == PermissionStatus.granted) {
return true;
}
}
return false;
}
if (Platform.isAndroid) {
if (await _requestPermission(Permission.storage)) {
//code here
}
}
Upvotes: 1