原生提供功能,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<String, Object> 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 = _flutterBinding.getApplicationContext();
PackageManager pm = cont
Flutter录音功能实现:Android & Kotlin & Dart 深度解析

这篇博客介绍了如何在Flutter中开发录音功能的插件,详细阐述了Android部分的手动注册及录音实现,使用了特定的封装格式。Dart模块通过method channel进行异步调用。iOS部分则由于其API的特性,增加了暂停和恢复录音功能。文章还提到了权限管理,包括麦克风和存储权限,并提供了完整的GitHub仓库链接。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



