700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > android 后台实时定位 实现后台定位 持续无限制定位

android 后台实时定位 实现后台定位 持续无限制定位

时间:2023-07-10 05:44:38

相关推荐

android 后台实时定位 实现后台定位 持续无限制定位

更新记录

1.0.2(-04-27)

新增:定位模式传入可高精度定位模式,低功耗定位模式,以及实现gps离线定位(不需要连接网络)

1.0.1(-03-17)

1.停止定位增加回调信息 2.修改定时回调方式,解决重复返还定位信息

查看更多

平台兼容性

Android

iOS

适用版本区间:4.4 - 11.0

×

原生插件通用使用流程:

购买插件,选择该插件绑定的项目。

在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。

根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。

打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。

开发完毕后正式云打包

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择

## 插件解决的问题

1.解决app切换到后台之后无法定位的问题,包含有GPS定位,高德定位,获取当前位置卫星数等

2.如果想解决 当 app切换到后台、锁屏之后,系统经常会杀死app,导致app无法进行后台定位的情况,可以配合以下保活插件使用,效果更好

3.插件使用说明

1.初始化定位插件

const gpsListener = uni.requireNativePlugin('ljc-location');

2.判断是否有定位权限 (flag:false/true)

gpsListener.isLocationPermissions(function(res){

console.log(res)

})

3.申请后台定位权限

gpsListener.requestLocationPermissions();

4.开启定位 返回定位监听回调(新增传入参数:定位模式)注意修改!

0 高精度定位模式:会同时使用网络定位和GPS定位,优先返回最高精度的定位结果,以及对应的地址描述信息。

1低功耗定位模式:不会使用GPS和其他传感器,只会使用网络定位(Wi-Fi和基站定位);

2 仅用设备定位模式:不需要连接网络,只使用GPS进行定位,这种模式下不支持室内环境的定位,需要在室外环境下才可以成功定位。注意,自 v2.9.0 版本之后,仅设备定位模式下支持返回地址描述信息。

/*

-参数说明-

参数1 : 定位时间间隔 设置两秒返回一次 参数单位秒

参数2:定位模式

0代表高精度定位模式 1代表低功耗定位模式 2代表仅用设备定位模式

*/

gpsListener.initLocationListener(2,0);

//开始定位 定位监听回调

gpsListener.startLocationListener(res=>{

console.log(res)

});

res 返回数据格式解析说明

详细说明可以查看官方文档:高德类 AMapLocation说明

{

//gps相关报告

"gpsResult": {

"gPSStatusString": "GPS状态正常", //gps状态

"gPSSatellites": 8 //当前位置GPS搜星数

},

"result": {

"verticalAccuracyMeters": 19.747879028320312,

"gpsAccuracyStatus": 1, //精度

"time": 1607069383000, //定位时间

"fromMockProvider": false,

"elapsedRealtimeUncertaintyNanos": 0,

"district": "某某区",

"bearing": 0,

"address": "某省某市某区工五路5号靠近某小区", //详细地址

"speedAccuracyMetersPerSecond": 1.2578155994415283,

"conScenario": 0,

"poiName": "某小区", //兴趣点

"satellites": 8, // 获取当前提供定位服务的卫星个数

"longitude": 100.1697171114, //经度

"street": "工五路", //街道

"provider": "gps", //提供者

"altitude": 176.49,

"road": "工五路", //路

"coordType": "GCJ02",

"locationDetail": "",

"buildingId": "",

"speed": 0,

"bearingAccuracyDegrees": 0,

"city": "某1市", //市

"province": "某省", //省

"trustedLevel": 1,

"fixLastLocation": false,

"offset": true,

"errorInfo": "success",

"adCode": "411503",

"streetNum": "14号",

"description": "在某小区附近", //地址 详情

"errorCode": 0,

"cityCode": "0376", //城市编码

"locationType": 1,

"latitude": 38.142724026669306, //纬度

"mock": false,

"elapsedRealtimeNanos": 775234330752552,

"accuracy": 18.337085723876953, //精度

"complete": true,

"country": "中国", //国家

"floor": ""

}

}

6.关闭定位

gpsListener.stopLocationListener(res=>{

console.log(res);

})

7.代码示例

判断是否有定位权限

申请后台定位权限

GPS定位权限

开启定位

关闭定位

当前经度:{{gpsObj.longitude}}

当前纬度:{{gpsObj.latitude}}

GPS状态:{{gpsObj.status}}

当前位置获取卫星总数:{{gpsObj.count}}

const gpsListener = uni.requireNativePlugin('ljc-location');

export default {

data() {

return {

gpsObj: {

longitude: 0,

latitude: 0,

count: 0,

status: ""

}

}

},

onLoad() {

uni.getLocation({

success(res) {

console.log(res)

}

})

},

methods: {

isLocationPermissions() {

gpsListener.isLocationPermissions(function(res) {

console.log(res)

})

},

requestLocationPermissions() {

gpsListener.requestLocationPermissions();

},

initLocationListener() {

//单位秒

gpsListener.initLocationListener(2);

},

startLocationListener() {

let that = this;

/*

-参数说明-

参数1 : 定位时间间隔 设置两秒返回一次 参数单位秒

参数2:定位模式 详细说明看插件文档

0代表高精度定位模式 1代表低功耗定位模式 2代表仅用设备定位模式

*/

gpsListener.initLocationListener(2,0);

//开始定位 定位监听回调

gpsListener.startLocationListener(res => {

console.log(res)

that.gpsObj.latitude = res.result.latitude

that.gpsObj.longitude = res.result.longitude

that.gpsObj.status = res.gpsResult.gPSStatusString

that.gpsObj.count = res.gpsResult.gPSSatellites

});

},

stopLocation() {

gpsListener.stopLocationListener(res => {

console.log(res);

})

},

//检测是否开启定位

openGPS() {

let system = uni.getSystemInfoSync(); // 获取系统信息

if (system.platform === 'android') { // 判断平台

var context = plus.android.importClass("android.content.Context");

var locationManager = plus.android.importClass("android.location.LocationManager");

var main = plus.android.runtimeMainActivity();

var mainSvr = main.getSystemService(context.LOCATION_SERVICE);

if (!mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER)) {

uni.showModal({

title: '提示',

content: '请打开定位服务功能',

showCancel: false, // 不显示取消按钮

success() {

if (!mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER)) {

var Intent = plus.android.importClass('android.content.Intent');

var Settings = plus.android.importClass('android.provider.Settings');

var intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);

main.startActivity(intent); // 打开系统设置GPS服务页面

} else {

console.log('GPS功能已开启');

}

}

});

}

}

}

}

}

.text-area {

display: flex;

justify-content: center;

flex-direction: column;

justify-content: center;

}

button {

margin: 5px;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。