flutter-permission-handler icon indicating copy to clipboard operation
flutter-permission-handler copied to clipboard

when request MANAGE_EXTERNAL_STORAGE,catch a crash

Open chensimin920511 opened this issue 2 years ago • 2 comments

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 avatar Jul 19 '22 02:07 chensimin920511

@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!

JDDV avatar Jul 28 '22 13:07 JDDV

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

DeMarcoMan avatar Aug 02 '22 12:08 DeMarcoMan

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;
}

indrawow avatar Dec 24 '22 07:12 indrawow

This seems to be related to 116, 406 and 1192.

When permissions are revoked, Android will kill the application.

If you believe there to be a solution/remedy to this behavior, where the application can recover, please let us know!

JeroenWeener avatar Nov 16 '23 11:11 JeroenWeener