开发 Flutter 录音功能的插件
原生提供功能,Dart module 通过 method channel 异步调用
1,安卓部分
手动注册
Flutter 官方的做法,就是自动注册插件,
很方便
手动注册,体现本文的不同
插件是 AudioRecorderPlugin
class MainActivity: FlutterActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)flutterEngine!!.plugins.add(AudioRecorderPlugin())}
}
安卓和 Dart 的通讯
主要是消息回调
下文依次是,
- 开始录音
- 结束录音
- 正在录音
- 是否有录音权限
注意,这里的录音权限包含两个,麦克风的权限,和存储权限
@Override
public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {switch (call.method) {case "start":Log.d(LOG_TAG, "Start");Log.d(LOG_TAG, "11111____");String path = call.argument("path");mExtension = call.argument("extension");startTime = Calendar.getInstance().getTime();if (path != null) {mFilePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + path;} else {Log.d(LOG_TAG, "11111____222");String fileName = String.valueOf(startTime.getTime());mFilePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + fileName + mExtension;}Log.d(LOG_TAG, mFilePath);startRecording();isRecording = true;result.success(null);break;case "stop":Log.d(LOG_TAG, "Stop");stopRecording();long duration = Calendar.getInstance().getTime().getTime() - startTime.getTime();Log.d(LOG_TAG, "Duration : " + String.valueOf(duration));isRecording = false;HashMap recordingResult = new HashMap<>();recordingResult.put("duration", duration);recordingResult.put("path", mFilePath);recordingResult.put("audioOutputFormat", mExtension);result.success(recordingResult);break;case "isRecording":Log.d(LOG_TAG, "Get isRecording");result.success(isRecording);break;case "hasPermissions":Log.d(LOG_TAG, "Get hasPermissions");Context context = _
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
