解决方案 1
/**若通过用户操作获取定位无需实时上传定位 可用一下代码 相对定位更加准确*若需求是生成轨迹 如:滴滴打车 顺风车 运动轨迹 以下代码不可行 *在息屏 或 代码再后台运行时 改代码 无法获取定位信息*/navigator.geolocation.getCurrentPosition(onSuccess , onError,{enableHighAcuracy : true,// 指示浏览器获取高精度的位置,默认为false timeout : 5000,// 指定获取地理位置的超时时间,默认不限时,单位为毫秒 maximumAge : 2000 // 最长有效期,在重复获取地理位置时,此参数指定多久再次获取位置。 });//定位数据获取成功响应function onSuccess(position){})//定位数据获取失败响应function onError(error) {if(window.mySET1)clearTimeout(window.mySET1)window.mySET1=setTimeout(() => {switch(error.code) {case error.PERMISSION_DENIED:console.log("定位失败,用户拒绝请求地理定位");Toast("您拒绝对获取地理位置的请求");break;case error.POSITION_UNAVAILABLE:Toast("定位失败,位置信息是不可用");console.log("定位失败,位置信息是不可用");break;case error.TIMEOUT:console.log("定位失败,请求获取用户位置超时");Toast("请求您的地理位置超时");break;case error.UNKNOWN_ERROR:Toast("定位失败,定位系统失效");console.log("定位失败,定位系统失效");break;} }, 500); }
解决方案 2
/**该方法可在后台运行 或 息屏 后 继续获取定位*定位位置相对不是那么准确 存在些许误差 但是够用 * 参考文档:/doc/zh_cn/geolocation.html*/ // 扩展API加载完毕后调用onPlusReady回调函数 document.addEventListener('plusready', onPlusReady, false);// 扩展API加载完毕,现在可以正常调用扩展APIfunction onPlusReady(){// 使用百度地图地位模块获取位置信息plus.geolocation.getCurrentPosition(function(p){alert('Geolocation\nLatitude:' + p.coords.latitude + '\nLongitude:' + p.coords.longitude + '\nAltitude:' + p.coords.altitude);}, function(e){alert('Geolocation error: ' + e.message);},{provider:'baidu'});}
-------------------------9-3-------------------------------
对解决方案进行优化
若以上代码依旧未解决持续定位问题
/**允许程序后台运行,以持续获取GPS位置 *结束程序后台运行 * 此处代码摘自:.cn/article/1273* 若代码添加后还是不理想 在手机设置中设置允许后台运行 找到电池相关设置 以华为为例 * 设置-》电池-》耗电排行-》你的APP-》应用启动管理-》允许后台活动*/var g_wakelock = null; //允许程序后台运行,以持续获取GPS位置 function wakeLock() {//Android var main = plus.android.runtimeMainActivity(); var Context = plus.android.importClass("android.content.Context"); var PowerManager = plus.android.importClass("android.os.PowerManager"); var pm = main.getSystemService(Context.POWER_SERVICE); g_wakelock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "ANY_NAME"); g_wakelock.acquire(); } wakeLock()//结束程序后台运行 function releaseWakeLock () {if(g_wakelock != null && g_wakelock.isHeld()) {g_wakelock.release(); g_wakelock = null; } }