flutter-permission-handler
flutter-permission-handler copied to clipboard
when request MANAGE_EXTERNAL_STORAGE,catch a crash
D/AndroidRuntime(13646): Shutting down VM E/AndroidRuntime(13646): FATAL EXCEPTION: main E/AndroidRuntime(13646): Process: com.example.fluttertest, PID: 13646 E/AndroidRuntime(13646): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=210, result=0, data=null} to activity {com.example.fluttertest/com.example.fluttertest.MainActivity}: java.lang.IllegalStateException: Reply already submitted E/AndroidRuntime(13646): at android.app.ActivityThread.deliverResults(ActivityThread.java:5802) E/AndroidRuntime(13646): at android.app.ActivityThread.handleSendResult(ActivityThread.java:5843) E/AndroidRuntime(13646): at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51) E/AndroidRuntime(13646): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149) E/AndroidRuntime(13646): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103) E/AndroidRuntime(13646): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2532) E/AndroidRuntime(13646): at android.os.Handler.dispatchMessage(Handler.java:109) E/AndroidRuntime(13646): at android.os.Looper.loop(Looper.java:228) E/AndroidRuntime(13646): at android.app.ActivityThread.main(ActivityThread.java:8731) E/AndroidRuntime(13646): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime(13646): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:613) E/AndroidRuntime(13646): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1085) E/AndroidRuntime(13646): Caused by: java.lang.IllegalStateException: Reply already submitted E/AndroidRuntime(13646): at io.flutter.embedding.engine.dart.DartMessenger$Reply.reply(DartMessenger.java:431) E/AndroidRuntime(13646): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.success(MethodChannel.java:267) E/AndroidRuntime(13646): at com.baseflow.permissionhandler.-$$Lambda$fOfJ7OpNBkhP48Mtzqs01exhUJs.onSuccess(Unknown Source:2) E/AndroidRuntime(13646): at com.baseflow.permissionhandler.PermissionManager.onActivityResult(PermissionManager.java:101) E/AndroidRuntime(13646): at io.flutter.embedding.engine.FlutterEngineConnectionRegistry$FlutterEngineActivityPluginBinding.onActivityResult(FlutterEngineConnectionRegistry.java:840) E/AndroidRuntime(13646): at io.flutter.embedding.engine.FlutterEngineConnectionRegistry.onActivityResult(FlutterEngineConnectionRegistry.java:441) E/AndroidRuntime(13646): at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onActivityResult(FlutterActivityAndFragmentDelegate.java:772) E/AndroidRuntime(13646): at io.flutter.embedding.android.FlutterActivity.onActivityResult(FlutterActivity.java:685) E/AndroidRuntime(13646): at android.app.Activity.dispatchActivityResult(Activity.java:8687) E/AndroidRuntime(13646): at android.app.ActivityThread.deliverResults(ActivityThread.java:5795) E/AndroidRuntime(13646): ... 11 more
@chensimin920511, same applies here as on your other issue. Can you give me a code snippet/example so I can see what is going on, and if I can reproduce the issue? Thanks in advance!
You can reproduce it in the permission handler example app by just enabling and disabling the permission. Like this:
https://user-images.githubusercontent.com/25788830/182379652-b7aeb7ad-40a6-408c-9734-7749bee6385b.mp4
Same problem.
In my case: I am requests using list:
Map<Permission, PermissionStatus> checkPermissions = await [Permission.storage, Permission.manageExternalStorage].request();
My solution:
Request storage
first, then manageExternalStorage
Using Permission.storage.request()
and Permission.manageExternalStorage.request()
PermissionStatus permissionStatusStorage = await Permission.storage.request();
if (permissionStatusStorage != PermissionStatus.granted) {
// if not granted
return;
}
PermissionStatus permissionStatusManageExternalStorage = await Permission.manageExternalStorage.request();
if (permissionStatusManageExternalStorage != PermissionStatus.granted) {
// if not granted
return;
}