当前位置: 首页 > news >正文

uniapp开发APP后台保活机制

 android和ios通过开启定位来实现保活。需要用户授权定位

 1、开启定位代码 location.js

export default {//检测是否开启系统定位权限hasLocationPermission() {let system = uni.getSystemInfoSync();if (system.platform === 'android') { //安卓let context = plus.android.importClass("android.content.Context");let locationManager = plus.android.importClass("android.location.LocationManager");let main = plus.android.runtimeMainActivity();let service = main.getSystemService(context.LOCATION_SERVICE);//已开启系统定位服务功能if (service.isProviderEnabled(locationManager.GPS_PROVIDER)) return true;else { //未开启引导开启uni.showModal({title: '定位权限开启提醒',confirmText: "去设置",content: '为了确保您能稳定获取数据,请前往打开定位服务功能',success: e => {if (e.confirm) {//打开手机系统gps定位设置页面let Intent = plus.android.importClass('android.content.Intent');let Settings = plus.android.importClass('android.provider.Settings');let intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);main.startActivity(intent);}}})}} else if (system.platform === 'ios') { //ioslet cllocationManger = plus.ios.import("CLLocationManager");let enable = cllocationManger.locationServicesEnabled();let status = cllocationManger.authorizationStatus();plus.ios.deleteObject(cllocationManger);if (enable && status != 2) return true; //已开启定位功能else {uni.showModal({title: '定位权限开启提醒',confirmText: "去设置",content: '为了确保您能稳定获取数据,请前往打开定位服务功能',success: e => {if (e.confirm) {let UIApplication = plus.ios.import("UIApplication");let application = UIApplication.sharedApplication();let NSURL = plus.ios.import("NSURL");let setting = NSURL.URLWithString("app-settings:");application.openURL(setting);plus.ios.deleteObject(setting);plus.ios.deleteObject(NSURL);plus.ios.deleteObject(application);}}});}}return false;},/**开启后台持续获取定位功能* successCallBack:成功回调函数*failCallBack:失败回调函数 *maximumAge:获取定位间隔时间*/startLocationService(successCallBack = () => {}, failCallBack = () => {}, maximumAge = 10 * 1000) {if (this.hasLocationPermission()) { //有定位权限let locationWatcherId = plus.geolocation.watchPosition((position) => {successCallBack({locationWatcherId,position: position.coords})}, function(e) {failCallBack(e)}, {maximumAge, //获取位置间隔时间});}},//关闭定位功能closeLocationService(locationWatcherId) { //locationWatcherId:开启步骤生成的监听器idplus.geolocation.clearWatch(locationWatcherId)},
}

2、在App.vue中使用

import locationWatcher from '@/utils/location.js';// 在生命周期onLaunch中使用
locationWatcher.startLocationService((e) => {let { latitude, longitude } = e.position;console.log(`当前位置,经度${longitude},纬度${latitude}`);},(e) => {console.log(e, '定位失败');}
);


http://www.mrgr.cn/news/67536.html

相关文章:

  • 030集——分组法——C# CAD二次开发
  • Spring Boot 3中基于纯MyBatis的CURD开发实例
  • 计算机的错误计算(一百四十六)
  • LeetCode:27. 移除元素
  • 引入最新fluwx2.5.4的时候报错
  • Linux系统每日定时备份mysql数据
  • leetcode 3255 长度为 K 的子数组的能量值 II 中等
  • 五个高质量的视频素材下载网站,助力创作更高效
  • wxWidgets GUI设计教程 - 常用控件与复杂布局
  • 脉冲全闭环EtherCAT运动控制器的固件升级
  • linux驱动-i2c子系统框架学习(2)
  • 【测试语言篇二】Python进阶篇:lambda函数、异常和错误处理、Json处理、随机数、星号操作符
  • 钉钉调试微应用整理2
  • 海云安入选软件供应链安全十大代表厂商,软件供应链安全创新成果获认可
  • (十四)JavaWeb后端开发——MyBatis
  • 【Python】轻松解析JSON与XML:Python标准库的json与xml模块
  • 深度学习经典模型之Network in Network
  • 【单例模式】饿汉式与懒汉式以及线程安全
  • 嵌入向量模型与BM25算法结合:并行检索获取多种结果
  • 常见几种GB 9706.1-2020医疗器械试验工装,您有所了解吗?
  • 使用stream遍历对象集合,取出所有对象的某字段,并以逗号拼接起来
  • 【TabBar嵌套Navigation案例-常见问题按钮-WebView-加载JavaScript Objective-C语言】
  • 杭州电商运营公司排名:怎么找到适合自己的电商代运营公司
  • Java基础知识
  • 模拟计算机如何识别和执行机器语言指令:从虚拟CPU的角度解析
  • C#-哈希表