Flutter智能PTT控制插件flutter_smart_ptt的使用
Flutter智能PTT控制插件flutter_smart_ptt的使用
Android
在proguard-rules.pro
文件中添加以下规则:
-keep class com.corget.** { *; }
-dontwarn java.awt.**
创建对象
FlutterSmartPtt _flutterSmartPttPlugin = FlutterSmartPtt();
设置语言
_flutterSmartPttPlugin.setLanguage("en");
支持的语言参数包括:en
、es
、fa
、fr
、it
、ja
、ko
、pt
、ru
、tr
、uk
、zh
监听对讲数据更新
PocChangeNotifier pocChangeNotifier = _flutterSmartPttPlugin.getPocChangeNotifier();
pocChangeNotifier.addListener(() {
// 在这里处理数据更新逻辑
// 例如:
// pocChangeNotifier.xxx
});
字段定义:
字段定义 | 备注 |
---|---|
int id |
ID |
String account |
账号 |
String password |
密码 |
String name |
姓名 |
int status |
状态 |
int privilege |
权限 |
List<dynamic> groups |
所有组列表 |
Map groupsMap |
所有组映射表 |
Map usersMap |
所有用户(如果一个用户在多个组中,最后一个组的用户对象会被保存) |
int activeGroupId |
当前组ID,0表示不在任何组中 |
bool isRecording |
是否正在录音 |
bool isPlaying |
是否正在播放 |
String speakingName |
当前说话人的名字 |
List<int> speakingIdList |
当前说话人ID列表 |
bool hideTalker |
隐藏说话人 |
int offlineCode |
离线代码,-1表示正常退出 |
bool isOnline |
是否在线 |
String activeGroupName |
当前组名 |
dynamic showGroup |
显示当前成员的组 |
int showGroupId |
显示当前成员的组ID |
List<int> monitoredGroupIds |
监控组ID列表 |
int gpsInterval |
GPS间隔 |
String location |
位置 |
监听设置数据更新
SettingChangeNotifier settingChangeNotifier = _flutterSmartPttPlugin.getSettingChangeNotifier();
settingChangeNotifier.addListener(() {
// 在这里处理设置数据更新逻辑
// 例如:
// settingChangeNotifier.xxx
});
字段定义:
字段定义 | 备注 |
---|---|
bool enable8KCoding |
启用8K编码 |
bool enablePTT |
启用PTT |
bool enableToast |
是否启用通知 |
bool enableVoiceBroadCast |
是否启用语音广播 |
bool enableBeep |
是否启用蜂鸣声 |
bool enableLog |
是否启用日志 |
设置服务器地址
_flutterSmartPttPlugin.setUrl(url);
服务器地址列表:https://corget.com/flutter/url.txt
登录
_flutterSmartPttPlugin.login(account, password);
登出
_flutterSmartPttPlugin.logout();
开始讲话
_flutterSmartPttPlugin.startPTT();
结束讲话
_flutterSmartPttPlugin.endPTT();
进入指定组ID的组
_flutterSmartPttPlugin.enterGroup(groupId);
进入上一个组
_flutterSmartPttPlugin.enterPreGroup();
进入下一个组
_flutterSmartPttPlugin.enterNextGroup();
退出当前组
_flutterSmartPttPlugin.leaveGroup();
监控指定组ID的组
_flutterSmartPttPlugin.addMonitorGroup(groupId);
取消监控指定组ID的组
_flutterSmartPttPlugin.removeMonitorGroup(groupId);
发送SOS警报消息到当前组,如果当前不在该组,则发送到第一个组
_flutterSmartPttPlugin.sos();
临时呼叫一个或多个用户
_flutterSmartPttPlugin.inviteTmpGroup(userIdList);
将一个或多个用户拉入当前组
_flutterSmartPttPlugin.pullUsersToGroup(userIdList);
从当前组移除一个或多个用户
_flutterSmartPttPlugin.disJoinUser(userIdList);
强制使一个或多个用户无法登录
_flutterSmartPttPlugin.forceUserExit(userIdList);
根据组ID向组发送消息
_flutterSmartPttPlugin.sendGroupMsg(groupId, message);
根据用户ID向用户发送消息
_flutterSmartPttPlugin.sendUserMsg(userId, message);
修改设置
_flutterSmartPttPlugin.enablePTT(true);
_flutterSmartPttPlugin.enablePTT(false);
_flutterSmartPttPlugin.enable8KCoding(false);
_flutterSmartPttPlugin.enable8KCoding(true);
_flutterSmartPttPlugin.enableToast(true);
_flutterSmartPttPlugin.enableToast(false);
_flutterSmartPttPlugin.enableVoiceBroadCast(true);
_flutterSmartPttPlugin.enableVoiceBroadCast(false);
_flutterSmartPttPlugin.enableBeep(true);
_flutterSmartPttPlugin.enableBeep(false);
_flutterSmartPttPlugin.enableLog(true);
_flutterSmartPttPlugin.enableLog(false);
设置回调方法
_flutterSmartPttPlugin.smartPttMethodCall(handleMethodCall);
你可以根据需要处理回调方法。
例如,当收到其他人发送的文字消息时,你会收到名为"NotifyMsg"的回调方法。
自定义翻译内容
键值对翻译:https://corget.com/flutter/intl_en.arb.txt 如果你想覆盖翻译,返回指定翻译键的自定义翻译内容,例如:
dynamic handleMethodCall (MethodCall methodCall) {
String method = methodCall.method;
dynamic arguments = methodCall.arguments;
switch (method) {
case "GetTranslation":
String key=methodCall.arguments;
if(key=="Speaking"){
return "is currently speaking, release to end.";
}
break;
}
}
文本转语音(TTS)
实现自己的TTS播放: 监听PlayText方法,播放文本并返回true。
dynamic handleMethodCall (MethodCall methodCall) {
switch (method) {
case "PlayText":
// text: 要播放的文本
String text=methodCall.arguments[0];
// interrupt: 是否中断之前的播放
bool interrupt=methodCall.arguments[1];
logger.i("method callback:PlayText:text: $text");
logger.i("method callback:PlayText:interrupt: $interrupt");
return true;
}
}
定位
在iOS上,你需要在Info.plist文件中添加以下条目以访问设备的位置。只需打开你的Info.plist文件并添加以下内容(确保你更新了描述以便它在应用上下文中具有意义):
<key>NSLocationWhenInUseUsageDescription</key>
<string>本应用需要在使用过程中访问您的位置。</string>
更多关于Flutter智能PTT控制插件flutter_smart_ptt的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter智能PTT控制插件flutter_smart_ptt的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_smart_ptt
是一个用于在 Flutter 应用中实现智能 PTT(Push-to-Talk)功能的插件。PTT 是一种即时通讯方式,用户按下按钮时才能发送语音,松开按钮时停止发送。这种功能常用于对讲机、语音聊天等场景。
安装 flutter_smart_ptt
首先,你需要在 pubspec.yaml
文件中添加 flutter_smart_ptt
插件的依赖:
dependencies:
flutter:
sdk: flutter
flutter_smart_ptt: ^0.1.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
基本用法
-
初始化 PTT 控制器
在你的 Flutter 应用中,首先需要初始化 PTT 控制器。通常可以在
initState
方法中进行初始化。import 'package:flutter/material.dart'; import 'package:flutter_smart_ptt/flutter_smart_ptt.dart'; class PttDemo extends StatefulWidget { @override _PttDemoState createState() => _PttDemoState(); } class _PttDemoState extends State<PttDemo> { late SmartPttController _pttController; @override void initState() { super.initState(); _pttController = SmartPttController(); } @override void dispose() { _pttController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Smart PTT Demo'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ ElevatedButton( onPressed: _startPtt, child: Text('Start PTT'), ), ElevatedButton( onPressed: _stopPtt, child: Text('Stop PTT'), ), ], ), ), ); } void _startPtt() async { await _pttController.startPtt(); print('PTT started'); } void _stopPtt() async { await _pttController.stopPtt(); print('PTT stopped'); } }
-
启动和停止 PTT
在上述代码中,
_startPtt
和_stopPtt
方法分别用于启动和停止 PTT 功能。你可以通过按钮或其他事件来触发这些方法。 -
处理语音数据
flutter_smart_ptt
插件通常会提供回调方法来处理录制的语音数据。你可以通过监听这些回调来获取语音数据并发送到服务器或其他设备。void _startPtt() async { _pttController.onAudioDataReceived = (List<int> audioData) { // 处理接收到的语音数据 print('Received audio data: ${audioData.length} bytes'); }; await _pttController.startPtt(); print('PTT started'); }
-
权限处理
在使用 PTT 功能时,通常需要获取麦克风和网络权限。你需要在
AndroidManifest.xml
和Info.plist
中添加相应的权限声明。Android:
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.INTERNET" />
iOS:
<key>NSMicrophoneUsageDescription</key> <string>We need access to your microphone to record audio.</string> <key>NSLocalNetworkUsageDescription</key> <string>We need access to the network to send audio data.</string>