Flutter / Dart / Android-允许权限后,应用程式当机

问题描述

我在我的应用中使用Flutter Audio Recorder插件。显然,在Android中同时请求多个权限时会出现问题。

就我而言,在我的应用程序首次构建时,会出现一个弹出窗口,并询问“是否允许myapp访问设备上的照片和媒体?”。我单击允许,然后出现另一个弹出窗口,询问“是否允许myapp录制音频?”。单击此第二个允许后,应用程序崩溃。当我再次重建应用程序时,这次不会出现弹出窗口,并且该应用程序可以正常工作。

我不确定在哪里可以找到问题。这是我的AndroidManifest.xml中的内容

<uses-permission android:name="android.permission.RECORD_AUdio"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA"/>

这是我用来访问Flutter Audio Recorder插件代码。 (我从Github存储库中的示例代码获取了该插件);

@override
  void initState() {
    _init();
  super.initState();
   }

  _init() async {
    try {
      setState(() {
        stopButton = false;
        playButton = false;
        recButton = true;
      });
      if (await FlutterAudioRecorder.hasPermissions) {
        String customPath = '/Flutter_audio_recorder_';
        io.Directory appDocDirectory;
        if (io.Platform.isIOS) {
          appDocDirectory = await getApplicationDocumentsDirectory();
        } else {
          appDocDirectory = await getExternalStorageDirectory();
        }
        customPath = appDocDirectory.path +
            customPath +
            DateTime.Now().millisecondsSinceEpoch.toString();
        _recorder = FlutterAudioRecorder(customPath,audioFormat: AudioFormat.AAC,sampleRate: 44100);

        await _recorder.initialized;
        var current = await _recorder.current(channel: 0);

         setState(() {
          _current = current;
          _currentStatus = current.status;
        });
      } else {
        Scaffold.of(context).showSnackBar(
             SnackBar(content:  Text("You must accept permissions")));
      }
    } catch (e) {
      print(e);
    }
  }

这是hasPermissions插件本身中的Flutter_audio_recorder.dart方法

static Future<bool> get hasPermissions async {
    bool hasPermission = await _channel.invokeMethod('hasPermissions');
    return hasPermission;
  }

在构建应用程序时以及在第一个弹出窗口中单击“允许”之前,这是我在Android Studio控制台中看到的内容

D/AndroidAudioRecorder(21727): handleHasPermission false
D/AndroidAudioRecorder(21727): handleHasPermission false
W/Activity(21727): Can request only one set of permissions at a time
D/AndroidAudioRecorder(21727): parsing result
D/AndroidAudioRecorder(21727): onRequestPermissionsResult -true
D/AndroidAudioRecorder(21727): handleHasPermission false
W/Activity(21727): Can request only one set of permissions at a time
D/AndroidAudioRecorder(21727): parsing result
D/AndroidAudioRecorder(21727): onRequestPermissionsResult -true
D/AndroidAudioRecorder(21727): handleHasPermission false
W/Activity(21727): Can request only one set of permissions at a time
D/AndroidAudioRecorder(21727): parsing result
D/AndroidAudioRecorder(21727): onRequestPermissionsResult -true

这是单击第二个允许时得到的内容

D/AndroidAudioRecorder(21727): parsing result
D/AndroidAudioRecorder(21727): onRequestPermissionsResult -true
D/AndroidRuntime(21727): Shutting down VM
E/AndroidRuntime(21727): FATAL EXCEPTION: main
E/AndroidRuntime(21727): Process: com.megleechin.speakoholic,PID: 21727
E/AndroidRuntime(21727): java.lang.RuntimeException: Failure delivering result ResultInfo{who=@android:requestPermissions:,request=200,result=-1,data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} to activity {com.megleechin.speakoholic/com.megleechin.speakoholic.MainActivity}: java.lang.IllegalStateException: Reply already submitted
E/AndroidRuntime(21727):    at android.app.ActivityThread.deliverResults(ActivityThread.java:4845)
E/AndroidRuntime(21727):    at android.app.ActivityThread.handleSendResult(ActivityThread.java:4886)
E/AndroidRuntime(21727):    at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)
E/AndroidRuntime(21727):    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
E/AndroidRuntime(21727):    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
E/AndroidRuntime(21727):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
E/AndroidRuntime(21727):    at android.os.Handler.dispatchMessage(Handler.java:107)
E/AndroidRuntime(21727):    at android.os.Looper.loop(Looper.java:214)
E/AndroidRuntime(21727):    at android.app.ActivityThread.main(ActivityThread.java:7356)
E/AndroidRuntime(21727):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(21727):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
E/AndroidRuntime(21727):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
E/AndroidRuntime(21727): Caused by: java.lang.IllegalStateException: Reply already submitted
E/AndroidRuntime(21727):    at io.Flutter.embedding.engine.dart.DartMessenger$Reply.reply(DartMessenger.java:139)
E/AndroidRuntime(21727):    at io.Flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.success(MethodChannel.java:238)
E/AndroidRuntime(21727):    at com.zeno.Flutter_audio_recorder.FlutterAudioRecorderPlugin.onRequestPermissionsResult(FlutterAudioRecorderPlugin.java:79)
E/AndroidRuntime(21727):    at io.Flutter.embedding.engine.FlutterEnginePluginRegistry$FlutterEngineActivityPluginBinding.onRequestPermissionsResult(FlutterEnginePluginRegistry.java:664)
E/AndroidRuntime(21727):    at io.Flutter.embedding.engine.FlutterEnginePluginRegistry.onRequestPermissionsResult(FlutterEnginePluginRegistry.java:364)
E/AndroidRuntime(21727):    at io.Flutter.embedding.android.FlutterActivityAndFragmentDelegate.onRequestPermissionsResult(FlutterActivityAndFragmentDelegate.java:579)
E/AndroidRuntime(21727):    at io.Flutter.embedding.android.FlutterActivity.onRequestPermissionsResult(FlutterActivity.java:601)
E/AndroidRuntime(21727):    at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:8289)
E/AndroidRuntime(21727):    at android.app.Activity.dispatchActivityResult(Activity.java:8139)
E/AndroidRuntime(21727):    at android.app.ActivityThread.deliverResults(ActivityThread.java:4838)
E/AndroidRuntime(21727):    ... 11 more
I/Process (21727): Sending signal. PID: 21727 SIG: 9
Lost connection to device.

知道哪里出了问题吗?我可以在我的应用程序中请求权限吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...