Flutter无安卓权限录音插件record_without_android的使用
Flutter无安卓权限录音插件record_without_android的使用
简介
record_without_android
插件允许从麦克风录制音频到指定的文件路径或流。它支持多种平台,无需外部依赖。
平台功能对比矩阵
功能 | Android | iOS | Web | Windows | macOS | Linux |
---|---|---|---|---|---|---|
暂停/恢复 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
幅度(dBFS) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
权限检查 | ✔️ | ✔️ | ✔️ | ✔️ | ||
音频通道数 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
设备选择 | ✔️ 1 / 2 | (自动BT/麦克风) | ✔️ | ✔️ | ✔️ | ✔️ |
自动增益 | ✔️ 2 | (始终激活?) | ✔️ | |||
回声消除 | ✔️ 2 | ✔️ | ||||
噪声抑制 | ✔️ 2 | ✔️ |
文件编码支持
编码器 | Android | iOS | Web | Windows | macOS | Linux |
---|---|---|---|---|---|---|
aacLc | ✔️ | ✔️ | ? | ✔️ | ✔️ | ✔️ |
aacEld | ✔️ | ✔️ | ? | ✔️ | ||
aacHe | ✔️ | ? | ✔️ | |||
amrNb | ✔️ | ? | ✔️ | |||
amrWb | ✔️ | ? | ||||
opus | ✔️ | ✔️ 3 | ✔️ | |||
wav | ✔️ 2 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
flac | ✔️ 2 | ✔️ | ? | ✔️ | ✔️ | ✔️ |
pcm16bits | ✔️ 2 | ✔️ | ✔️ | ✔️ | ✔️ |
流编码支持
编码器 | Android | iOS | Web | Windows | macOS | Linux |
---|---|---|---|---|---|---|
aacLc | ✔️ 2 | |||||
aacEld | ✔️ 2 | |||||
aacHe | ✔️ 2 | |||||
pcm16bits | ✔️ 2 | ✔️ | ✔️ | ✔️ | ✔️ |
- AAC以原始AAC格式(带ADTS头)流式传输,可以直接通过文件读取!
使用方法
import 'package:record/record.dart';
final record = AudioRecorder();
// 检查并请求权限
if (await record.hasPermission()) {
// 开始录制到文件
await record.start(const RecordConfig(), path: 'aFullPath/myFile.m4a');
// ... 或者到流
final stream = await record.startStream(const RecordConfig(AudioEncoder.pcm16bits));
}
// 停止录制...
final path = await record.stop();
// ... 或取消录制(并隐式删除文件/流)。
await record.cancel();
record.dispose(); // 别忘了这个
设置权限和其他配置
Android
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- 可选:如果要使用蓝牙耳机/耳塞等蓝牙电话设备 -->
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<!-- 可选:如果要在公共文件夹中保存录制文件 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- 最低SDK版本:23(amrNb/amrWb: 26, Opus: 29)
iOS
<key>NSMicrophoneUsageDescription</key>
<string>Some message to describe why you need this permission</string>
- 最低SDK版本:11.0
macOS
<key>NSMicrophoneUsageDescription</key>
<string>Some message to describe why you need this permission</string>
- 在能力选项卡中,激活“音频输入”在调试和发布方案中。
- 或直接在*.entitlements文件中添加:
<key>com.apple.security.device.audio-input</key>
<true/>
- 最低SDK版本:10.15
示例代码
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:record_example/audio_player.dart';
import 'package:record_example/audio_recorder.dart';
void main() => runApp(const MyApp());
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
bool showPlayer = false;
String? audioPath;
[@override](/user/override)
void initState() {
showPlayer = false;
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: showPlayer
? Padding(
padding: const EdgeInsets.symmetric(horizontal: 25),
child: AudioPlayer(
source: audioPath!,
onDelete: () {
setState(() => showPlayer = false);
},
),
)
: Recorder(
onStop: (path) {
if (kDebugMode) print('Recorded file path: $path');
setState(() {
audioPath = path;
showPlayer = true;
});
},
),
),
),
);
}
}
更多关于Flutter无安卓权限录音插件record_without_android的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter无安卓权限录音插件record_without_android的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,如果你想使用录音功能但不想请求安卓权限,你可以使用 record_without_android
插件。这个插件允许你在不请求安卓权限的情况下进行录音。以下是如何使用 record_without_android
插件的步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 record_without_android
插件的依赖:
dependencies:
flutter:
sdk: flutter
record_without_android: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
2. 导入插件
在你的 Dart 文件中导入 record_without_android
插件:
import 'package:record_without_android/record_without_android.dart';
3. 初始化录音器
你可以通过 RecordWithoutAndroid
类来初始化录音器:
final recorder = RecordWithoutAndroid();
4. 开始录音
你可以使用 start
方法来开始录音。你可以指定录音文件的路径和格式:
void startRecording() async {
String path = await recorder.start();
print('Recording started at: $path');
}
5. 停止录音
你可以使用 stop
方法来停止录音:
void stopRecording() async {
String? path = await recorder.stop();
if (path != null) {
print('Recording stopped and saved at: $path');
} else {
print('Recording could not be stopped');
}
}
6. 检查录音状态
你可以使用 isRecording
方法来检查当前是否正在录音:
bool isRecording = await recorder.isRecording();
print('Is recording: $isRecording');
7. 处理录音文件
录音文件会被保存到指定的路径,你可以使用 path
变量来访问录音文件并进行进一步处理。
8. 释放资源
录音完成后,你可以使用 dispose
方法来释放资源:
void disposeRecorder() {
recorder.dispose();
}
完整示例
以下是一个完整的示例,展示了如何使用 record_without_android
插件进行录音:
import 'package:flutter/material.dart';
import 'package:record_without_android/record_without_android.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Record Without Android Permission'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: startRecording,
child: Text('Start Recording'),
),
ElevatedButton(
onPressed: stopRecording,
child: Text('Stop Recording'),
),
],
),
),
),
);
}
final recorder = RecordWithoutAndroid();
void startRecording() async {
String path = await recorder.start();
print('Recording started at: $path');
}
void stopRecording() async {
String? path = await recorder.stop();
if (path != null) {
print('Recording stopped and saved at: $path');
} else {
print('Recording could not be stopped');
}
}
}