|
|
|
|
<script>
|
|
|
|
|
const keepAlive = uni.requireNativePlugin('Ba-KeepAliveSuit');
|
|
|
|
|
const websocket = uni.requireNativePlugin('Ba-Websocket');
|
|
|
|
|
import {
|
|
|
|
|
dateFormat
|
|
|
|
|
} from "@/util/date.js";
|
|
|
|
|
export default {
|
|
|
|
|
globalData: {
|
|
|
|
|
// apiUrl: 'http://192.168.1.102:81', //接口地址
|
|
|
|
|
// apiUrl: 'http://192.168.1.34:81', //接口地址
|
|
|
|
|
// apiUrl: 'http://171.16.8.51:81', //接口地址
|
|
|
|
|
// apiUrl: 'http://192.169.9.252:1883', //接口地址
|
|
|
|
|
apiUrl: 'http://171.16.8.53:1883', //接口地址
|
|
|
|
|
// mobileUrl: 'http://171.16.8.51:81', //语音调度网关地址
|
|
|
|
|
// mobileUrl: 'http://192.169.9.252:1883', //语音调度网关地址
|
|
|
|
|
// mobileUrl: 'http://172.19.2.177:8081', //语音调度网关地址
|
|
|
|
|
mobileUrl: 'http://171.16.8.53:1883', //语音调度网关地址
|
|
|
|
|
fileUrl: 'http://171.16.8.51:8080' //文件资源前缀
|
|
|
|
|
// fileUrl: 'http://192.168.1.34:1888' //文件资源前缀
|
|
|
|
|
},
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
heartBeatEate: 10, //单位秒
|
|
|
|
|
employeeId: '',
|
|
|
|
|
message: '', //报警信息通知
|
|
|
|
|
timer: null,
|
|
|
|
|
reportLastTime: null, //报警信息最后一次时间
|
|
|
|
|
msgIds:[]
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
onLaunch: function() {
|
|
|
|
|
console.log('App Launch');
|
|
|
|
|
this.onKeep();
|
|
|
|
|
},
|
|
|
|
|
beforeDestroy() {
|
|
|
|
|
console.log('销毁');
|
|
|
|
|
this.stop();
|
|
|
|
|
},
|
|
|
|
|
onShow: function() {
|
|
|
|
|
//清除通知消息
|
|
|
|
|
this.msgIds.map(id => {
|
|
|
|
|
console.log('取消通知', id)
|
|
|
|
|
this.onCancelNotify(id);
|
|
|
|
|
})
|
|
|
|
|
this.msgIds = [];
|
|
|
|
|
console.log('App Show');
|
|
|
|
|
let userInfo = uni.getStorageSync('mobileInfo') ? JSON.parse(uni.getStorageSync('mobileInfo')) : null;
|
|
|
|
|
if (userInfo && userInfo.employeeId != this.employeeId) {
|
|
|
|
|
this.employeeId = userInfo.employeeId;
|
|
|
|
|
this.getStatus();
|
|
|
|
|
this.subStatus();
|
|
|
|
|
} else {
|
|
|
|
|
// uni.navigateTo({
|
|
|
|
|
// url: '/pages/setting/user'
|
|
|
|
|
// })
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
onHide: function() {
|
|
|
|
|
// setTimeout(() => {
|
|
|
|
|
// console.log('通知', new Date().getTime())
|
|
|
|
|
// this.onShowNotify();
|
|
|
|
|
// }, 1000)
|
|
|
|
|
// setTimeout(() => {
|
|
|
|
|
// console.log('通知', new Date().getTime())
|
|
|
|
|
// this.onShowNotify();
|
|
|
|
|
// }, 3000)
|
|
|
|
|
// console.log('App Hide', this.employeeId);
|
|
|
|
|
if (this.employeeId) {
|
|
|
|
|
this.getStatus();
|
|
|
|
|
this.receiveMsg();
|
|
|
|
|
this.subStatus(1);
|
|
|
|
|
} else {
|
|
|
|
|
let userInfo = uni.getStorageSync('mobileInfo') ? JSON.parse(uni.getStorageSync('mobileInfo')) : null;
|
|
|
|
|
if (userInfo && userInfo.employeeId != this.employeeId) {
|
|
|
|
|
this.employeeId = userInfo.employeeId;
|
|
|
|
|
this.getStatus();
|
|
|
|
|
this.receiveMsg();
|
|
|
|
|
this.subStatus(2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
// websocket
|
|
|
|
|
start() {
|
|
|
|
|
//开启 websocket 服务
|
|
|
|
|
websocket.start({
|
|
|
|
|
// wsUrl: 'ws://192.168.3.32:81/websocket', //websocket地址
|
|
|
|
|
// wsUrl: 'ws://192.168.1.34:81/websocket', //websocket地址
|
|
|
|
|
// wsUrl: 'ws://171.16.8.51:81/websocket', //websocket地址
|
|
|
|
|
wsUrl: 'ws://171.16.8.53:1883/websocket', //websocket地址
|
|
|
|
|
deviceId: this.employeeId, //唯一标识,用于区分(注意,有值时,websocket的真实请求地址为:wsUrl+'/'+deviceId)
|
|
|
|
|
heartBeatEate: this.heartBeatEate, //心跳,默认3分钟,单位秒
|
|
|
|
|
}, res => {
|
|
|
|
|
|
|
|
|
|
console.log('start websocket', 'ws://192.168.3.32:81/websocket/' + this.employeeId);
|
|
|
|
|
console.log(res);
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title:'start websocket,' + 'ws://192.168.3.32:81/websocket/' + this.employeeId,
|
|
|
|
|
icon:'none'
|
|
|
|
|
})
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
stop() {
|
|
|
|
|
//停止服务
|
|
|
|
|
websocket.stop(res => {
|
|
|
|
|
console.log('关闭websocket', res);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
receiveMsg() {
|
|
|
|
|
//接收消息
|
|
|
|
|
websocket.receiveMsg(res => {
|
|
|
|
|
console.log(res);
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title:'接收信息 =======>' + res.msg,
|
|
|
|
|
icon:'none'
|
|
|
|
|
})
|
|
|
|
|
if (res.ok && res.msg != '连接成功' && res.msg != 'header' && res.msg.indexOf('拒绝') < 0) {
|
|
|
|
|
let obj = JSON.parse(res.msg);
|
|
|
|
|
if (this.reportLastTime != obj.reportTime) {
|
|
|
|
|
this.reportLastTime = obj.reportTime;
|
|
|
|
|
this.message = obj.buildId + '号楼' + obj.floorNo + '层' + dateFormat(new Date(obj.reportTime)) +
|
|
|
|
|
'发生报警:' + obj
|
|
|
|
|
.content;
|
|
|
|
|
this.onShowNotify();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
sendMsg() { //发送消息
|
|
|
|
|
websocket.sendMsg({
|
|
|
|
|
msg: 'header'
|
|
|
|
|
}, res => {
|
|
|
|
|
console.log(res);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
subStatus(num) {
|
|
|
|
|
//监听 websocket 连接状态
|
|
|
|
|
websocket.subStatus(res => {
|
|
|
|
|
console.log("监听 websocket 连接状态" + num, res);
|
|
|
|
|
if (!res.websocketStatus) {
|
|
|
|
|
this.stop();
|
|
|
|
|
this.timer && clearTimeout(this.timer);
|
|
|
|
|
this.timer = setTimeout(() => {
|
|
|
|
|
this.start();
|
|
|
|
|
}, 30 * 1000);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
getStatus(type) {
|
|
|
|
|
//获取 websocket 服务开启状态
|
|
|
|
|
websocket.getStatus(res => {
|
|
|
|
|
console.log("websocket开启状态", res);
|
|
|
|
|
if (!res.data.websocketStatus) {
|
|
|
|
|
this.stop();
|
|
|
|
|
this.timer && clearTimeout(this.timer);
|
|
|
|
|
this.timer = setTimeout(() => {
|
|
|
|
|
this.start();
|
|
|
|
|
}, 10 * 1000);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
//通用保活
|
|
|
|
|
onKeep() {
|
|
|
|
|
//通用保活
|
|
|
|
|
keepAlive.onKeep({
|
|
|
|
|
title: "齐鲁医院报警通知",
|
|
|
|
|
content: "保持运行中...",
|
|
|
|
|
isRouge: true
|
|
|
|
|
},
|
|
|
|
|
(res) => {
|
|
|
|
|
console.log('onkeep', res);
|
|
|
|
|
// if (res.ok) {
|
|
|
|
|
// this.isIgnoringBattery();
|
|
|
|
|
// }
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
onAutoStart() { //去设置自启动、后台运行
|
|
|
|
|
keepAlive.onAutoStart(
|
|
|
|
|
(res) => {
|
|
|
|
|
console.log(res);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
requestIgnoreBattery() { //申请加入电池优化白名单
|
|
|
|
|
keepAlive.requestIgnoreBattery(
|
|
|
|
|
res => {
|
|
|
|
|
console.log(res);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
goIgnoreBattery() { //跳转到电池优化设置页
|
|
|
|
|
keepAlive.goIgnoreBattery(
|
|
|
|
|
res => {
|
|
|
|
|
console.log(res);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
isIgnoringBattery() { //是否加入电池优化白名单
|
|
|
|
|
keepAlive.isIgnoringBattery(
|
|
|
|
|
res => {
|
|
|
|
|
console.log(res);
|
|
|
|
|
if (!res.data.isIgnoring) {
|
|
|
|
|
uni.showModal({
|
|
|
|
|
title: '是否忽略电池优化',
|
|
|
|
|
content: '忽略后才能在后台保持连接接收消息通知,请前往设置!',
|
|
|
|
|
showCancel: false,
|
|
|
|
|
confirmText: '去设置',
|
|
|
|
|
success: (res) => {
|
|
|
|
|
if (res.confirm) {
|
|
|
|
|
this.goIgnoreBattery();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
onShowNotify() { //常驻通知保活
|
|
|
|
|
let id = new Date().getTime();
|
|
|
|
|
keepAlive.onShowNotify({
|
|
|
|
|
// channelId: "Ba-KeepAlive",
|
|
|
|
|
// channelName: "Ba-KeepAlive",
|
|
|
|
|
ID: id,
|
|
|
|
|
title: "入侵报警信息",
|
|
|
|
|
content: this.message,
|
|
|
|
|
},
|
|
|
|
|
(res) => {
|
|
|
|
|
console.log(res);
|
|
|
|
|
this.msgIds.push(id);
|
|
|
|
|
this.message = '';
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
onCancelNotify(id) {
|
|
|
|
|
//取消常驻通知保活
|
|
|
|
|
keepAlive.onCancelNotify({
|
|
|
|
|
// channelId: "Ba-KeepAlive",
|
|
|
|
|
// channelName: "Ba-KeepAlive",
|
|
|
|
|
ID:id
|
|
|
|
|
},
|
|
|
|
|
(res) => {
|
|
|
|
|
console.log(res);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
requestAndroidPermission() {
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
|
plus.android.requestPermissions(
|
|
|
|
|
[
|
|
|
|
|
"android.permission.RECEIVE_BOOT_COMPLETED", //开机自启权限
|
|
|
|
|
"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS", //忽略电池优化
|
|
|
|
|
],
|
|
|
|
|
(resultObj) => {
|
|
|
|
|
var result = 0;
|
|
|
|
|
for (var i = 0; i < resultObj.granted.length; i++) {
|
|
|
|
|
var grantedPermission = resultObj.granted[i];
|
|
|
|
|
console.log('已获取的权限:' + grantedPermission);
|
|
|
|
|
result = 0;
|
|
|
|
|
}
|
|
|
|
|
for (var i = 0; i < resultObj.deniedPresent.length; i++) {
|
|
|
|
|
var deniedPresentPermission = resultObj.deniedPresent[i];
|
|
|
|
|
console.log('拒绝本次申请的权限:' + deniedPresentPermission);
|
|
|
|
|
result = 0;
|
|
|
|
|
}
|
|
|
|
|
for (var i = 0; i < resultObj.deniedAlways.length; i++) {
|
|
|
|
|
var deniedAlwaysPermission = resultObj.deniedAlways[i];
|
|
|
|
|
console.log('永久拒绝申请的权限:' + deniedAlwaysPermission);
|
|
|
|
|
result = -1;
|
|
|
|
|
}
|
|
|
|
|
resolve(result);
|
|
|
|
|
},
|
|
|
|
|
(error) => {
|
|
|
|
|
console.log('申请权限错误:' + error.code + " = " + error.message);
|
|
|
|
|
resolve({
|
|
|
|
|
code: error.code,
|
|
|
|
|
message: error.message
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
// 判断通知权限
|
|
|
|
|
getPermis() {
|
|
|
|
|
var main = plus.android.runtimeMainActivity();
|
|
|
|
|
var pkName = main.getPackageName();
|
|
|
|
|
var uid = main.getApplicationInfo().plusGetAttribute("uid");
|
|
|
|
|
var NotificationManagerCompat = plus.android.importClass("android.support.v4.app.NotificationManagerCompat");
|
|
|
|
|
//android.support.v4升级为androidx
|
|
|
|
|
if (NotificationManagerCompat == null) {
|
|
|
|
|
NotificationManagerCompat = plus.android.importClass("androidx.core.app.NotificationManagerCompat");
|
|
|
|
|
}
|
|
|
|
|
var areNotificationsEnabled = NotificationManagerCompat.from(main).areNotificationsEnabled();
|
|
|
|
|
// 未开通‘允许通知’权限,则弹窗提醒开通,并点击确认后,跳转到系统设置页面进行设置
|
|
|
|
|
console.log('areNotificationsEnabled', areNotificationsEnabled)
|
|
|
|
|
if (!areNotificationsEnabled) {
|
|
|
|
|
uni.showModal({
|
|
|
|
|
title: '通知权限开启提醒',
|
|
|
|
|
content: '您还没有开启通知权限,无法接受到消息通知,请前往设置!',
|
|
|
|
|
showCancel: false,
|
|
|
|
|
confirmText: '去设置',
|
|
|
|
|
success: function(res) {
|
|
|
|
|
if (res.confirm) {
|
|
|
|
|
var Intent = plus.android.importClass('android.content.Intent');
|
|
|
|
|
var Build = plus.android.importClass("android.os.Build");
|
|
|
|
|
//android 8.0引导
|
|
|
|
|
if (Build.VERSION.SDK_INT >= 26) {
|
|
|
|
|
var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');
|
|
|
|
|
intent.putExtra('android.provider.extra.APP_PACKAGE', pkName);
|
|
|
|
|
} else if (Build.VERSION.SDK_INT >= 21) { //android 5.0-7.0
|
|
|
|
|
var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');
|
|
|
|
|
intent.putExtra("app_package", pkName);
|
|
|
|
|
intent.putExtra("app_uid", uid);
|
|
|
|
|
} else { //(<21)其他--跳转到该应用管理的详情页
|
|
|
|
|
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
|
|
|
|
|
var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
|
|
|
|
|
intent.setData(uri);
|
|
|
|
|
}
|
|
|
|
|
// 跳转到该应用的系统通知设置页
|
|
|
|
|
main.startActivity(intent);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style lang="scss">
|
|
|
|
|
/*每个页面公共css */
|
|
|
|
|
@import '@/uni_modules/uni-scss/index.scss';
|
|
|
|
|
/* #ifndef APP-NVUE */
|
|
|
|
|
@import '@/static/customicons.css';
|
|
|
|
|
|
|
|
|
|
// 设置整个项目的背景色
|
|
|
|
|
page {
|
|
|
|
|
background-color: #f5f5f5;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* #endif */
|
|
|
|
|
.example-info {
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
color: #333;
|
|
|
|
|
padding: 10px;
|
|
|
|
|
}
|
|
|
|
|
</style>
|