0%

Flutter音频录制插件flutter_sound配置

最近在开发的一个 Flutter App 中需要用到录音的功能,经过对几款插件的比较,最终确定了采用 flutter_sound 这款插件来实现。Flutter Sound 插件为Android和iOS平台提供了简单的记录器和播放器功能。

flutter_sound 插件目前有两个版本: v4.x.xv5.x.x ,我直接使用的是最新的 v5.1.0

有录音必然要有播放,播放的的话我并没有选用 flutter_sound 来同时实现,而是采用里另一款评价量高的插件 audioplayers


添加依赖

1
2
3
4
5
6
7
8
9
10
11
dependencies:
# 必需
permission_handler: ^5.0.1
path_provider: ^1.6.11
audioplayers: ^0.15.1
flutter_sound: ^5.0.0

# 可选
intl: ^0.16.1
filesize: ^1.0.4
uuid: ^2.1.0

设置权限

Ios权限

需要获取使用麦克风权限和后台录音权限。

在文件 ios/Runner/info.plist 中添加:

1
2
3
4
5
6
<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for recording</string>
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
Android权限

在文件 android/app/src/main/AndroidManifest.xml 中添加:

1
2
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

真机调试初始化

Ios

首先,修改 ios/Podfile 文件中的 platform:

1
2
3
4
5
# platform :ios, '9.0'

# 修改成:

platform :ios, '11.0'

然后ios 目录下执行 pod install 安装所需依赖:

1
2
cd ios
pod install

最后,第一次真机运行一定要通过 XCode 来执行 Build 操作。

  1. Finder 中打开 ios 目录,找到 Runner.xcworkspace 文件,选择用 XCode 打开。
  2. 配置 Team :依次选择 左侧目录栏 RunnerTARGETS 中 RunnerSinging&Capabilities – 点击 Team 选项,选择 Apple ID 账户或新增。
  3. 执行 Build 操作。
Ios配置注意

上面的最后一步操作中,一定要先通过 XCode 来进行 Build 操作。否则的话,如果你是直接在 VSCode 中执行 flutter run ,会报如下的错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
...
...
/Users/project/myflutter_test/build/ios/Debug-iphonesimulator/flutter_sound/flutter_sound.framework/Headers/TrackPlayer.h:42:38: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
- (void)nowPlaying:(FlutterMethodCall*)call result: (FlutterResult)result;
^
/Users/project/myflutter_test/build/ios/Debug-iphonesimulator/flutter_sound/flutter_sound.framework/Headers/TrackPlayer.h:42:38: note: insert '_Nullable' if the pointer may be null
- (void)nowPlaying:(FlutterMethodCall*)call result: (FlutterResult)result;
^
_Nullable
/Users/project/myflutter_test/build/ios/Debug-iphonesimulator/flutter_sound/flutter_sound.framework/Headers/TrackPlayer.h:42:38: note: insert '_Nonnull' if the pointer should never be null
- (void)nowPlaying:(FlutterMethodCall*)call result: (FlutterResult)result;
^
_Nonnull
/Users/project/myflutter_test/build/ios/Debug-iphonesimulator/flutter_sound/flutter_sound.framework/Headers/TrackPlayer.h:42:54: warning: block pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
- (void)nowPlaying:(FlutterMethodCall*)call result: (FlutterResult)result;
^
/Users/project/myflutter_test/build/ios/Debug-iphonesimulator/flutter_sound/flutter_sound.framework/Headers/TrackPlayer.h:42:54: note: insert '_Nullable' if the block pointer may be null
- (void)nowPlaying:(FlutterMethodCall*)call result: (FlutterResult)result;
^
_Nullable
/Users/project/myflutter_test/build/ios/Debug-iphonesimulator/flutter_sound/flutter_sound.framework/Headers/TrackPlayer.h:42:54: note: insert '_Nonnull' if the block pointer should never be null
- (void)nowPlaying:(FlutterMethodCall*)call result: (FlutterResult)result;
^
_Nonnull
...
...
Android

打开 android/build.gradle 文件:

将其中的两处

1
2
3
4
repositories {
google()
jcenter()
}

修改为:

1
2
3
4
5
6
7
repositories {
// google()
// jcenter()
maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
maven { url 'https://maven.aliyun.com/repository/public/' }
}

如有疑问或需要技术讨论,请留言或发邮件到 service@itfanr.cc