1,新增安卓本地通知用于对讲在后台及前台运行时的呼叫提醒
2,优化点击接听后的显示逻辑,以及接听失败的处理和提醒 3,对讲页面刷新UI的事件逻辑优化完善
This commit is contained in:
parent
063e62d087
commit
56f4717c95
@ -27,6 +27,7 @@
|
||||
<!--允许麦克风权限,用于录音发送-->
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK"/>
|
||||
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
|
||||
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<uses-permission android:name="android.permission.VIBRATE"/>
|
||||
@ -35,6 +36,9 @@
|
||||
<meta-data
|
||||
android:name="flutterEmbedding"
|
||||
android:value="2" />
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_channel_id"
|
||||
android:value="1"/> <!-- 将您的通知渠道ID替换为您的实际ID -->
|
||||
<!-- 配置定位Service -->
|
||||
<service android:name="com.amap.api.location.APSService"/>
|
||||
<activity android:name="com.skychip.lock.MainActivity" android:exported="true" android:screenOrientation="portrait" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize">
|
||||
|
||||
BIN
star_lock/android/app/src/main/res/drawable/app_icon.png
Normal file
BIN
star_lock/android/app/src/main/res/drawable/app_icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
@ -53,9 +53,9 @@ initLocalNotification() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
|
||||
FlutterLocalNotificationsPlugin();
|
||||
final AndroidInitializationSettings initializationSettingsAndroid =
|
||||
const AndroidInitializationSettings initializationSettingsAndroid =
|
||||
AndroidInitializationSettings('app_icon');
|
||||
final InitializationSettings initializationSettings =
|
||||
const InitializationSettings initializationSettings =
|
||||
InitializationSettings(android: initializationSettingsAndroid);
|
||||
await flutterLocalNotificationsPlugin.initialize(initializationSettings);
|
||||
}
|
||||
|
||||
@ -43,53 +43,29 @@ class LockMonitoringLogic extends BaseGetXController {
|
||||
StreamSubscription? _getUDPStatusRefreshUIEvent;
|
||||
void _getUDPStatusRefreshUIAction() {
|
||||
_getUDPStatusRefreshUIEvent =
|
||||
eventBus.on<GetUDPStatusRefreshUI>().listen((event) {
|
||||
if (UDPTalkClass().isEndCall == true) {
|
||||
eventBus.on<GetUDPStatusRefreshUI>().listen((event) async {
|
||||
state.udpStatus.value = event.udpStatus;
|
||||
state.oneMinuteTime.value = 0;
|
||||
|
||||
// 如果已经挂断,则取消定时器并退出
|
||||
if (state.udpStatus.value == 0 && UDPTalkClass().isEndCall == true) {
|
||||
state.oneMinuteTimeTimer.cancel();
|
||||
state.oneMinuteTime.value = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
state.udpStatus.value = event.udpStatus;
|
||||
// 如果是接听状态,则启动定时器更新通话时间
|
||||
if (state.udpStatus.value == 8) {
|
||||
if (state.oneMinuteTime.value >= 60) {
|
||||
// 超过60秒了
|
||||
_getUDPStatusRefreshUIEvent!.cancel();
|
||||
if (state.oneMinuteTimeTimer != null) {
|
||||
state.oneMinuteTimeTimer.cancel();
|
||||
}
|
||||
initiateUdpHangUpAction();
|
||||
print('输出挂断1');
|
||||
return;
|
||||
}
|
||||
// 接听成功了,然后刷新界面的时间 60秒以后自动挂断
|
||||
state.oneMinuteTimeTimer.cancel(); // 取消旧定时器
|
||||
state.oneMinuteTimeTimer =
|
||||
Timer.periodic(const Duration(seconds: 1), (Timer t) async {
|
||||
Timer.periodic(const Duration(seconds: 1), (Timer t) {
|
||||
state.oneMinuteTime.value++;
|
||||
// Get.log('state.oneMinuteTime.value:${state.oneMinuteTime.value}');
|
||||
// if (state.oneMinuteTime.value >= 60) {
|
||||
// // 超过60秒了
|
||||
// _getUDPStatusRefreshUIEvent!.cancel();
|
||||
// if (state.oneMinuteTimeTimer != null) {
|
||||
// state.oneMinuteTimeTimer.cancel();
|
||||
// }
|
||||
// initiateUdpHangUpAction();
|
||||
// print('输出挂断1');
|
||||
// state.oneMinuteTime.value = 0;
|
||||
// // 挂断
|
||||
// UDPSenderManage.sendMainProtocol(
|
||||
// command: 150,
|
||||
// commandTypeIsCalling: 1,
|
||||
// subCommand: 30,
|
||||
// lockID: UDPManage().lockId,
|
||||
// lockIP: UDPManage().host,
|
||||
// userMobile: await state.userUid,
|
||||
// userMobileIP: await state.userMobileIP,
|
||||
// endData: []);
|
||||
|
||||
// CallTalk().stopPcmSound();
|
||||
// // 关闭当前界面
|
||||
// Get.back();
|
||||
// }
|
||||
if (state.oneMinuteTime.value >= 60) {
|
||||
t.cancel(); // 取消定时器
|
||||
initiateUdpHangUpAction(); // 挂断操作
|
||||
print('通话时间超过60秒,自动挂断');
|
||||
state.oneMinuteTime.value = 0;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
@ -98,8 +74,8 @@ class LockMonitoringLogic extends BaseGetXController {
|
||||
//发起接听命令,每隔一秒钟发一次,六秒无应答则失败
|
||||
void initiateUdpAnswerAction() {
|
||||
state.answerTimer = Timer.periodic(const Duration(seconds: 1), (timer) {
|
||||
state.answerSeconds++;
|
||||
udpAnswerAction();
|
||||
state.answerSeconds++;
|
||||
|
||||
//如果接听成功,取消定时器;接听失败,继续发接听命令
|
||||
if (UDPTalkClass().status == 8) {
|
||||
|
||||
@ -169,7 +169,11 @@ class _LockMonitoringPageState extends State<LockMonitoringPage> {
|
||||
return Row(mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [
|
||||
// 接听
|
||||
Obx(() => bottomBtnItemWidget(
|
||||
getAnswerBtnImg(), getAnswerBtnName(), Colors.white, () async {
|
||||
state.isClickAnswer.value == true
|
||||
? 'images/main/icon_lockDetail_monitoringUnTalkback.png'
|
||||
: getAnswerBtnImg(),
|
||||
state.isClickAnswer.value == true ? '长按说话' : getAnswerBtnName(),
|
||||
Colors.white, () async {
|
||||
if (state.isClickAnswer.value == false) {
|
||||
logic.initiateUdpAnswerAction();
|
||||
state.isClickAnswer.value = true;
|
||||
@ -200,6 +204,7 @@ class _LockMonitoringPageState extends State<LockMonitoringPage> {
|
||||
state.isClickHangUp.value = true;
|
||||
} else {
|
||||
print('点了这里?');
|
||||
state.isClickHangUp.value = false;
|
||||
UDPTalkClass().stopLocalAudio();
|
||||
}
|
||||
}),
|
||||
|
||||
@ -68,6 +68,7 @@ class CommandUDPReciverManager {
|
||||
// 停止声音
|
||||
UDPTalkClass().stopLocalAudio();
|
||||
eventBus.fire(GetUDPStatusRefreshUI(UDPTalkClass().status));
|
||||
print('接听反馈刷新UI1');
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -105,7 +106,6 @@ class CommandUDPReciverManager {
|
||||
break;
|
||||
case 30:
|
||||
{
|
||||
print('反馈挂断1');
|
||||
// 挂断
|
||||
if ((data[7] & 0x3) == 1) {
|
||||
// 对方结束对讲
|
||||
@ -114,13 +114,13 @@ class CommandUDPReciverManager {
|
||||
//结束对讲反馈
|
||||
print("结束对讲反馈");
|
||||
}
|
||||
UDPTalkClass().callNoAnswer();
|
||||
// UDPTalkClass().status = 0;
|
||||
// UDPTalkClass().isBeCall = false;
|
||||
// UDPTalkClass().stopLocalAudio();
|
||||
// CallTalk().stopPcmSound();
|
||||
// eventBus.fire(GetUDPStatusRefreshUI(UDPTalkClass().status));
|
||||
// Get.back();
|
||||
UDPTalkClass().status = 0;
|
||||
UDPTalkClass().isBeCall = false;
|
||||
UDPTalkClass().stopLocalAudio();
|
||||
CallTalk().stopPcmSound();
|
||||
eventBus.fire(GetUDPStatusRefreshUI(UDPTalkClass().status));
|
||||
Get.back();
|
||||
print('挂断反馈刷新UI1');
|
||||
}
|
||||
break;
|
||||
case 140:
|
||||
|
||||
@ -104,9 +104,10 @@ class UDPTalkClass {
|
||||
Future<void> _showNotification(
|
||||
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin) async {
|
||||
const AndroidNotificationDetails androidPlatformChannelSpecifics =
|
||||
AndroidNotificationDetails('your channel id', 'your channel name',
|
||||
AndroidNotificationDetails('1', 'flutter_channel',
|
||||
importance: Importance.max,
|
||||
priority: Priority.high,
|
||||
playSound: true,
|
||||
ticker: 'ticker');
|
||||
const NotificationDetails platformChannelSpecifics =
|
||||
NotificationDetails(android: androidPlatformChannelSpecifics);
|
||||
@ -171,16 +172,13 @@ class UDPTalkClass {
|
||||
|
||||
//呼叫有响铃无应答处理
|
||||
void callNoAnswer() {
|
||||
print('无应答处理');
|
||||
|
||||
// print('无应答处理');
|
||||
stopLocalAudio();
|
||||
CallTalk().stopPcmSound();
|
||||
status = 0;
|
||||
isBeCall = false;
|
||||
isEndCall = true;
|
||||
LockMonitoringState().isClickHangUp.value = false;
|
||||
|
||||
eventBus.fire(GetUDPStatusRefreshUI(status));
|
||||
Get.back();
|
||||
}
|
||||
}
|
||||
|
||||
@ -15,7 +15,7 @@ class XSJPushProvider {
|
||||
appKey: "7ff37d174c1a568a89e98dad",
|
||||
channel: "flutter_channel",
|
||||
production: false,
|
||||
debug: true,
|
||||
debug: false,
|
||||
);
|
||||
|
||||
jpush.addEventHandler(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user