问题描述
我在我的应用中使用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 (将#修改为@)