diff --git a/star_lock/lib/main/lockDetail/lockDetail/realTimePicture/realTimePicture_logic.dart b/star_lock/lib/main/lockDetail/lockDetail/realTimePicture/realTimePicture_logic.dart index a4a6a6e1..452e1de1 100644 --- a/star_lock/lib/main/lockDetail/lockDetail/realTimePicture/realTimePicture_logic.dart +++ b/star_lock/lib/main/lockDetail/lockDetail/realTimePicture/realTimePicture_logic.dart @@ -6,6 +6,7 @@ import 'package:flutter_voice_processor/flutter_voice_processor.dart'; import 'package:get/get.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:star_lock/main/lockDetail/lockDetail/realTimePicture/realTimePicture_state.dart'; +import 'package:star_lock/talk/call/callTalk.dart'; import '../../../../talk/call/g711.dart'; import '../../../../talk/udp/udp_manage.dart'; @@ -62,6 +63,7 @@ class RealTimePictureLogic extends BaseGetXController { userMobile: await state.userMobile, userMobileIP: await state.userMobileIP, endData: []); + CallTalk().stopPcmSound(); // 关闭当前界面 Get.back(); diff --git a/star_lock/lib/main/lockDetail/lockDetail/realTimePicture/realTimePicture_page.dart b/star_lock/lib/main/lockDetail/lockDetail/realTimePicture/realTimePicture_page.dart index 189fe46c..95663ece 100644 --- a/star_lock/lib/main/lockDetail/lockDetail/realTimePicture/realTimePicture_page.dart +++ b/star_lock/lib/main/lockDetail/lockDetail/realTimePicture/realTimePicture_page.dart @@ -3,6 +3,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:star_lock/main/lockDetail/lockDetail/realTimePicture/realTimePicture_logic.dart'; +import 'package:star_lock/talk/call/callTalk.dart'; import '../../../../app_settings/app_colors.dart'; import '../../../../tools/showTFView.dart'; @@ -193,7 +194,7 @@ class _RealTimePicturePageState extends State bottomBtnItemWidget( "images/main/icon_lockDetail_hangUp.png", "挂断", Colors.red, () async { logic.stopProcessing(); - + CallTalk().stopPcmSound(); // 挂断 logic.udpHangUpAction(); }), diff --git a/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_logic.dart b/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_logic.dart index a4b04980..e14baf60 100644 --- a/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_logic.dart +++ b/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_logic.dart @@ -1,4 +1,3 @@ - import 'dart:async'; import 'dart:convert'; import 'dart:math'; @@ -7,6 +6,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_voice_processor/flutter_voice_processor.dart'; import 'package:get/get.dart'; import 'package:permission_handler/permission_handler.dart'; +import 'package:star_lock/talk/call/callTalk.dart'; import '../../../../talk/call/g711.dart'; import '../../../../talk/udp/udp_manage.dart'; @@ -41,14 +41,16 @@ class LockMonitoringLogic extends BaseGetXController { /// 收到UDP发送的状态 StreamSubscription? _getUDPStatusRefreshUIEvent; void _getUDPStatusRefreshUIAction() { - _getUDPStatusRefreshUIEvent = eventBus.on().listen((event) { + _getUDPStatusRefreshUIEvent = + eventBus.on().listen((event) { state.udpStatus.value = event.udpStatus; - if(state.udpStatus.value == 8){ + if (state.udpStatus.value == 8) { // 接听成功了,然后刷新界面的时间 60秒以后自动挂断 - state.oneMinuteTimeTimer = Timer.periodic(const Duration(seconds:1), (Timer t) async { + state.oneMinuteTimeTimer = + Timer.periodic(const Duration(seconds: 1), (Timer t) async { state.oneMinuteTime.value++; // Get.log('state.oneMinuteTime.value:${state.oneMinuteTime.value}'); - if(state.oneMinuteTime.value >= 60){ + if (state.oneMinuteTime.value >= 60) { // 超过60秒了 state.oneMinuteTimeTimer.cancel(); state.oneMinuteTime.value = 0; @@ -63,6 +65,7 @@ class LockMonitoringLogic extends BaseGetXController { userMobileIP: await state.userMobileIP, endData: []); + CallTalk().stopPcmSound(); // 关闭当前界面 Get.back(); } @@ -81,8 +84,7 @@ class LockMonitoringLogic extends BaseGetXController { lockIP: UDPManage().host, userMobile: await state.userMobile, userMobileIP: await state.userMobileIP, - endData: [] - ); + endData: []); } /// 挂断 @@ -128,7 +130,9 @@ class LockMonitoringLogic extends BaseGetXController { while (start < audioData.length) { // await Future.delayed(const Duration(milliseconds: 50)); - int end = (start + length > audioData.length) ? audioData.length : start + length; + int end = (start + length > audioData.length) + ? audioData.length + : start + length; List sublist = audioData.sublist(start, end); sendRecordData({ "bytes": sublist, @@ -165,7 +169,9 @@ class LockMonitoringLogic extends BaseGetXController { errorListener(VoiceProcessorException error) { print("VoiceProcessorException: $error"); - }; + } + + ; state.voiceProcessor?.addFrameListener(frameListener); state.voiceProcessor?.addErrorListener(errorListener); @@ -173,15 +179,10 @@ class LockMonitoringLogic extends BaseGetXController { if (await state.voiceProcessor?.hasRecordAudioPermission() ?? false) { await state.voiceProcessor?.start(320, 8000); bool? isRecording = await state.voiceProcessor?.isRecording(); - - } else { - - } + } else {} } on PlatformException catch (ex) { Get.log("PlatformException: $ex"); - } finally { - - } + } finally {} } Future stopProcessing() async { @@ -189,9 +190,7 @@ class LockMonitoringLogic extends BaseGetXController { await state.voiceProcessor?.stop(); } on PlatformException catch (ex) { Get.log("PlatformException: $ex"); - } finally { - - } + } finally {} } void onError(Object e) { @@ -199,7 +198,6 @@ class LockMonitoringLogic extends BaseGetXController { } sendRecordData(Map args) async { - List bytes = args["bytes"]; // int udpSendDataFrameNumber = args["udpSendDataFrameNumber"]; String? lockID = args["lockID"]; @@ -218,7 +216,7 @@ class LockMonitoringLogic extends BaseGetXController { // while(list.isNotEmpty) { state.udpSendDataFrameNumber++; - if (state.udpSendDataFrameNumber >= 65536) state.udpSendDataFrameNumber=1; + if (state.udpSendDataFrameNumber >= 65536) state.udpSendDataFrameNumber = 1; // 57 List topBytes = []; @@ -281,7 +279,8 @@ class LockMonitoringLogic extends BaseGetXController { topBytes[6] = (state.udpSendDataFrameNumber & 0x000000FF); topBytes[7] = ((state.udpSendDataFrameNumber & 0x0000FF00) >> 8); - print("udpSendDataFrameNumber:${state.udpSendDataFrameNumber} topBytes[63]:${topBytes[6]} topBytes[64]:${topBytes[7]}"); + print( + "udpSendDataFrameNumber:${state.udpSendDataFrameNumber} topBytes[63]:${topBytes[6]} topBytes[64]:${topBytes[7]}"); topBytes.addAll(bytes); Get.log("setVoiceBytes:$topBytes"); @@ -293,8 +292,7 @@ class LockMonitoringLogic extends BaseGetXController { lockIP: lockIP, userMobile: userMobile, userMobileIP: userMobileIP, - endData: topBytes - ); + endData: topBytes); // UDPManage().sendData(topBytes); } @@ -324,7 +322,16 @@ class LockMonitoringLogic extends BaseGetXController { } int search(int val) { - List table = [0xFF, 0x1FF, 0x3FF, 0x7FF, 0xFFF, 0x1FFF, 0x3FFF, 0x7FFF]; + List table = [ + 0xFF, + 0x1FF, + 0x3FF, + 0x7FF, + 0xFFF, + 0x1FFF, + 0x3FFF, + 0x7FFF + ]; int size = 8; for (int i = 0; i < size; i++) { if (val <= table[i]) { @@ -392,9 +399,10 @@ class LockMonitoringLogic extends BaseGetXController { void onClose() { // TODO: implement onClose print("锁详情界面销毁了"); + CallTalk().stopPcmSound(); _getTVDataRefreshUIEvent!.cancel(); _getUDPStatusRefreshUIEvent!.cancel(); - if(state.oneMinuteTimeTimer != null){ + if (state.oneMinuteTimeTimer != null) { state.oneMinuteTimeTimer.cancel(); } stopProcessing(); diff --git a/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart b/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart index 1bfca06f..a75674bd 100644 --- a/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart +++ b/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart @@ -1,8 +1,8 @@ - import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:star_lock/talk/call/callTalk.dart'; import '../../../../app_settings/app_colors.dart'; import '../../../../talk/udp/udp_manage.dart'; @@ -43,12 +43,15 @@ class _LockMonitoringPageState extends State { top: ScreenUtil().statusBarHeight + 30.h, width: 1.sw, child: Obx(() { - var sec = (state.oneMinuteTime.value % 60).toString().padLeft(2,'0'); - var min = (state.oneMinuteTime.value ~/ 60).toString().padLeft(2,'0'); + var sec = + (state.oneMinuteTime.value % 60).toString().padLeft(2, '0'); + var min = + (state.oneMinuteTime.value ~/ 60).toString().padLeft(2, '0'); return Row( mainAxisAlignment: MainAxisAlignment.center, children: [ - Text("$min:$sec", style: TextStyle(fontSize: 26.sp, color: Colors.white)), + Text("$min:$sec", + style: TextStyle(fontSize: 26.sp, color: Colors.white)), // SizedBox(width: 30.w), // GestureDetector( // onTap: () { @@ -66,8 +69,7 @@ class _LockMonitoringPageState extends State { // ), // ), // ), - ] - ); + ]); }), ), Positioned( @@ -155,45 +157,44 @@ class _LockMonitoringPageState extends State { Widget bottomBottomBtnWidget() { return Row(mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ // 接听 - Obx(() => bottomBtnItemWidget(getAnswerBtnImg(), getAnswerBtnName(), Colors.white, () async { - //获取麦克风权限 - await logic.getPermissionStatus().then((value) async { - if (!value) { - return; - } + Obx(() => bottomBtnItemWidget( + getAnswerBtnImg(), getAnswerBtnName(), Colors.white, () async { + //获取麦克风权限 + await logic.getPermissionStatus().then((value) async { + if (!value) { + return; + } - // state.isSenderAudioData.value = false; - print("发送接听了"); - // 刚进来是接听状态,然后改为长按对讲 - logic.udpAnswerAction(); - }); - }, - longPress: (){ - // 开始长按 - print("onLongPress"); - state.listAudioData.value = []; - if (state.udpStatus.value == 8) { - state.udpStatus.value = 9; - } - // logic.readG711Data(); - logic.startProcessing(); - }, - longPressUp: () async { - // 长按结束 - print("onLongPressUp"); - if (state.udpStatus.value == 9) { - state.udpStatus.value = 8; - } + // state.isSenderAudioData.value = false; + print("发送接听了"); + // 刚进来是接听状态,然后改为长按对讲 + logic.udpAnswerAction(); + }); + }, longPress: () { + // 开始长按 + print("onLongPress"); + state.listAudioData.value = []; + if (state.udpStatus.value == 8) { + state.udpStatus.value = 9; } - ) - ), - bottomBtnItemWidget("images/main/icon_lockDetail_hangUp.png", "挂断", Colors.red, () async { + // logic.readG711Data(); + logic.startProcessing(); + }, longPressUp: () async { + // 长按结束 + print("onLongPressUp"); + if (state.udpStatus.value == 9) { + state.udpStatus.value = 8; + } + })), + bottomBtnItemWidget( + "images/main/icon_lockDetail_hangUp.png", "挂断", Colors.red, () async { logic.stopProcessing(); - + CallTalk().stopPcmSound(); // 挂断 logic.udpHangUpAction(); }), - bottomBtnItemWidget("images/main/icon_lockDetail_monitoringUnlock.png", "开锁", AppColors.mainColor, () { + bottomBtnItemWidget("images/main/icon_lockDetail_monitoringUnlock.png", + "开锁", AppColors.mainColor, () { showDeletPasswordAlertDialog(context); }) ]); @@ -202,26 +203,28 @@ class _LockMonitoringPageState extends State { String getAnswerBtnImg() { switch (state.udpStatus.value) { case 8: - return "images/main/icon_lockDetail_monitoringUnTalkback.png"; + return "images/main/icon_lockDetail_monitoringUnTalkback.png"; case 9: - return "images/main/icon_lockDetail_monitoringTalkback.png"; + return "images/main/icon_lockDetail_monitoringTalkback.png"; default: - return "images/main/icon_lockDetail_monitoringAnswerCalls.png"; + return "images/main/icon_lockDetail_monitoringAnswerCalls.png"; } } String getAnswerBtnName() { switch (state.udpStatus.value) { case 8: - return "长按说话"; + return "长按说话"; case 9: - return "松开发送"; + return "松开发送"; default: - return "接听"; + return "接听"; } } - Widget bottomBtnItemWidget(String iconUrl, String name, Color backgroundColor, Function() onClick, {Function()? longPress, Function()? longPressUp}) { + Widget bottomBtnItemWidget( + String iconUrl, String name, Color backgroundColor, Function() onClick, + {Function()? longPress, Function()? longPressUp}) { var wh = 80.w; return GestureDetector( onTap: onClick, @@ -285,6 +288,5 @@ class _LockMonitoringPageState extends State { @override void dispose() { super.dispose(); - } } diff --git a/star_lock/lib/talk/call/callTalk.dart b/star_lock/lib/talk/call/callTalk.dart index 335e33cf..9316a486 100644 --- a/star_lock/lib/talk/call/callTalk.dart +++ b/star_lock/lib/talk/call/callTalk.dart @@ -153,6 +153,9 @@ class CallTalk { //停止接收音频数据 void stopPcmSound() { + FlutterPcmSound.setup(sampleRate: 8000, channelCount: 1); + FlutterPcmSound.pause(); + FlutterPcmSound.clear(); FlutterPcmSound.stop(); } } diff --git a/star_lock/lib/talk/udp/udp_talkClass.dart b/star_lock/lib/talk/udp/udp_talkClass.dart index 7cb332e4..62a28123 100644 --- a/star_lock/lib/talk/udp/udp_talkClass.dart +++ b/star_lock/lib/talk/udp/udp_talkClass.dart @@ -1,5 +1,4 @@ import 'dart:async'; - import 'package:audioplayers/audioplayers.dart'; import 'package:fast_gbk/fast_gbk.dart'; import 'package:flutter/material.dart'; @@ -71,11 +70,7 @@ class UDPTalkClass { UDPManage().sendData(data); }); - // _getFirstFrameGoPushAction(); - // Future.delayed(const Duration(seconds: 1), () { - // 在这里写要延迟执行的代码 - Get.toNamed(Routers.lockMonitoringPage, arguments: {"lockId": "111"}); - // }); + Get.toNamed(Routers.lockMonitoringPage, arguments: {"lockId": "111"}); } playLocalAudio(); @@ -84,19 +79,6 @@ class UDPTalkClass { } } - void _getFirstFrameGoPushAction() { - // 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus - StreamSubscription _GetFirstFrameGoPushEvent = - eventBus.on().listen((event) { - if (event.isFirstFrame == true) { - Future.delayed(const Duration(seconds: 1), () { - // 在这里写要延迟执行的代码 - Get.toNamed(Routers.lockMonitoringPage, arguments: {"lockId": "111"}); - }); - } - }); - } - // 判断是否是call的本人 Future isCallMe(List? data) async { final loginData = await Storage.getLoginData();