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");

支持的语言参数包括:enesfafritjakoptrutrukzh

监听对讲数据更新

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

1 回复

更多关于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 来安装依赖。

基本用法

  1. 初始化 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');
      }
    }
    
  2. 启动和停止 PTT

    在上述代码中,_startPtt_stopPtt 方法分别用于启动和停止 PTT 功能。你可以通过按钮或其他事件来触发这些方法。

  3. 处理语音数据

    flutter_smart_ptt 插件通常会提供回调方法来处理录制的语音数据。你可以通过监听这些回调来获取语音数据并发送到服务器或其他设备。

    void _startPtt() async {
      _pttController.onAudioDataReceived = (List<int> audioData) {
        // 处理接收到的语音数据
        print('Received audio data: ${audioData.length} bytes');
      };
      await _pttController.startPtt();
      print('PTT started');
    }
    
  4. 权限处理

    在使用 PTT 功能时,通常需要获取麦克风和网络权限。你需要在 AndroidManifest.xmlInfo.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>
回到顶部