开发 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 = _


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部