1、获取持续定插件对象
var loc = uni.requireNativePlugin('AMap-Loc');
示例代码
<script>
//持续定位插件对象
var loc = uni.requireNativePlugin('AMap-Loc');
export default {
data() {
}
}
</script>
2、检查定位权限,始终允许后台定位
检查定位权限,注:Android在app首次启动的第一个页面onLoad里调用时,部分手机第一次可能不会弹出权限检查,可延迟调用检查定位权限。
loc.checkLocationPermission(callback);
检查是否始终允许定位,注:ios只有首次安装时才会弹框提醒和回调。
loc.checkAlwaysLocationPermission(callback);
判断是否始终允许定位,为false时 引导用户去设置页面
var always = loc.grantedAlwaysLocation();
示例代码
<script>
//持续定位插件对象
var loc = uni.requireNativePlugin('AMap-Loc');
export default {
data() {
},
onLoad() {
//检查定位权限, 注:Android在app首次启动的第一个页面onLoad里调用时,部分手机第一次可能不会弹出权限检查,可延迟调用检查定位权限
loc.checkLocationPermission(function(res){
console.log(res);
if (res.result == true) {
//检查 始终允许 定位,注:ios只有首次安装时才会弹框提醒和回调
loc.checkAlwaysLocationPermission(function(res2){
console.log(res2);
});
}
});
},
methods: {
grantedAlwaysLocation() {
//判断是否始终允许定位,为false 引导用户去设置页面
var always = loc.grantedAlwaysLocation();
console.log("always:" + always);
}
}
}
</script>
3、设置定位数据回调
loc.setLocationCallback(callback)
callback 返回 Object 参数说明
属性 | 类型 | 说明 |
code | Number | 定位错误码, 可以参考高德定位官方文档定位SDK错误码对照表 |
data | Object | 定位数据,当code == 0时返回该字段 |
msg | String | 定位错误消息,当code != 0时返回该字段 |
data 返回 Object 参数说明
属性 | 类型 | 说明 |
latitude | Number | 纬度 |
longitude | Number | 经度 |
altitude | Number | 海拔高度(单位:米) 默认值:0.0 |
speed | Number | 当前速度(单位:米/秒) 默认值:0.0 |
bearing | Number | 方向角(单位:度) 默认值:0.0 |
time | Number | 定位时间戳 |
当setLocationOption定位配置needAddress: true时返回下列字段数据 | ||
address | String | 地址信息(需要网络通畅,第一次有可能没有地址信息返回) |
country | String | 国家名称 |
province | String | 省的名称 |
city | String | 城市名称 |
cityCode | String | 城市编码 |
district | String | 区的名称 |
adCode | String | 区域编码 |
street | String | 街道名称 |
streetNum | String | 门牌号 |
aoiName | String | 兴趣面名称 |
poiName | String | 兴趣点名称 |
示例代码
<script>
//持续定位插件对象
var loc = uni.requireNativePlugin('AMap-Loc');
export default {
data() {
},
onLoad() {
//设置定位数据回调
loc.setLocationCallback(function(res){
console.log(res);
if (res.code == 0) {
var data = res.data;//定位数据
} else {
var errorCode = res.code;//定位错误码,参考https://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode
var errorMsg = res.msg;//错误消息
}
});
}
}
</script>
4、设置定位配置
loc.setLocationOption(option)
option 参数说明
属性 | 类型 | 默认值 | 必填 | 说明 |
needAddress | boolean | 否 | 设置是否返回地址信息,true:返回地址信息,false:不返回 | |
android端定位配置 | ||||
interval | Number | 2000 | 否 | 设置定位间隔,单位毫秒,默认为2000ms,最低1000ms。 |
locationPurpose | Number | 否 | 设置定位场景,目前支持三种场景(0:签到、1:出行、2:运动,默认无场景) | |
locationMode | Number | 2 | 否 | 定位模式,高德定位服务包含GPS和网络定位(Wi-Fi和基站定位)两种能力。定位SDK将GPS、网络定位能力进行了封装,以三种定位模式对外开放,SDK默认选择使用高精度定位模式。 2: 高精度定位模式,会同时使用网络定位和GPS定位,优先返回最高精度的定位结果,以及对应的地址描述信息。 1: 设备定位模式,不需要连接网络,只使用GPS进行定位,这种模式下不支持室内环境的定位,需要在室外环境下才可以成功定位。 0: 低功耗定位模式:不会使用GPS和其他传感器,只会使用网络定位(Wi-Fi和基站定位)。 |
mockEnable | boolean | true | 否 | 设置是否允许模拟软件Mock位置结果,多为模拟GPS定位结果,默认为true,允许模拟位置。 |
httpTimeOut | Number | 30000 | 否 | 设置定位请求超时时间,单位是毫秒,默认30000毫秒,建议超时时间不要低于8000毫秒。 |
locationCacheEnable | boolean | true | 否 | 设置是否开启定位缓存机制,缓存机制默认开启。 |
sensorEnable | boolean | false | 否 | 设置是否使用设备传感器 默认值:false 不使用设备传感器。当设置为true时会通过手机传感器获取海拔高度,如果手机没有对应的传感器会返回0.0。 |
ios端定位配置 | ||||
enableHTTPS | boolean | true | 否 | 是否开启HTTPS |
allowsBackgroundLocationUpdates | boolean | false | 否 | 是否允许后台定位。默认为false,设置为true的时候必须保证 Background Modes 中的 Location updates 处于选中状态,否则会抛出异常。由于iOS系统限制,需要在定位未开始之前或定位停止之后,修改该属性的值才会有效果。 |
pausesLocationUpdatesAutomatically | boolean | false | 否 | 后台定位是否会被系统自动暂停。默认为false。 |
distanceFilter | Number | 0.0 | 否 | 设定定位的最小更新距离。单位米,默认为0,表示只要检测到设备位置发生变化就会更新位置信息。 |
示例代码
<script>
//持续定位插件对象
var loc = uni.requireNativePlugin('AMap-Loc');
export default {
data() {
},
onLoad() {
//设置定位数据回调
loc.setLocationCallback(function(res){
console.log(res);
if (res.code == 0) {
var data = res.data;//定位数据
} else {
var errorCode = res.code;//定位错误码,参考https://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode
var errorMsg = res.msg;//错误消息
}
});
//定位配置
loc.setLocationOption({
needAddress:true,//定位是否需要解析地址
interval:2000,//(android)设置定位间隔,单位毫秒,默认为2000ms,最低1000ms。
//httpTimeOut:30000//(android)设置定位请求超时时间,单位是毫秒,默认30000毫秒,不要低于8000毫秒。
//locationCacheEnable:false,//(android)设置是否开启定位缓存机制
allowsBackgroundLocationUpdates:true,//(ios)是否允许后台定位
pausesLocationUpdatesAutomatically:false,//(ios)后台定位是否会被系统自动暂停
distanceFilter:0//,//(ios)设置定位最小更新距离方法如下,单位米。当两次定位距离满足设置的最小更新距离时,SDK会返回符合要求的定位结果。
//enableHTTPS:true,//(ios)
});
}
}
</script>
5、开启后台定位功能
Android端接口:
loc.enableBackgroundLocation(object)
object 参数说明
属性 | 类型 | 默认值 | 必填 | 说明 |
contentTitle | String | app名称 | 否 | 保活通知栏标题 |
contentText | String | 否 | 保活通知栏内容 |
示例代码
<script>
//持续定位插件对象
var loc = uni.requireNativePlugin('AMap-Loc');
export default {
data() {
},
onLoad() {
},
enableBackgroundLocation() {
//android特有的接口
//检查是否允许通知,oppo vivo等部分手机默认不允许通知
if (loc.areNotificationsEnabled()) {
//是否忽略电池优化,vivo部分手机需要忽略电池优化,保活才不被杀掉
if (loc.isIgnoringBatteryOptimizations()) {
//开启后台定位功能
loc.enableBackgroundLocation({
contentTitle:"默认app名称",
contentText:"正在后台运行"
});
} else {
//请求忽略电池优化
loc.requestIgnoreBatteryOptimizations();
}
} else {
//打开设置通知
loc.openSetting();
}
}
}
</script>
iOS无此接口,通过定位配置setLocationOption开启后台定位
示例代码
<script>
//持续定位插件对象
var loc = uni.requireNativePlugin('AMap-Loc');
export default {
data() {
},
onLoad() {
//定位配置
loc.setLocationOption({
allowsBackgroundLocationUpdates:true,//(ios)是否允许后台定位
pausesLocationUpdatesAutomatically:false//(ios)后台定位是否会被系统自动暂停
});
}
}
</script>
6、关闭后台定位功能
Android端接口:
loc.disableBackgroundLocation(removeNotification)
参数说明
参数 | 类型 | 说明 |
removeNotification | boolean | 是否移除通知栏, true:移除通知栏,false:不移除通知栏,可以手动移除。 |
示例代码
<script>
//持续定位插件对象
var loc = uni.requireNativePlugin('AMap-Loc');
export default {
data() {
},
onLoad() {
},
disableBackgroundLocation() {
//android特有的接口
//停止后台保活定位服务
var removeNotification = true;
loc.disableBackgroundLocation(removeNotification);
}
}
</script>
iOS无此接口,通过定位配置setLocationOption关闭后台定位
示例代码
<script>
//持续定位插件对象
var loc = uni.requireNativePlugin('AMap-Loc');
export default {
data() {
},
onLoad() {
//定位配置
loc.setLocationOption({
allowsBackgroundLocationUpdates:false,//(ios)是否允许后台定位
pausesLocationUpdatesAutomatically:true//(ios)后台定位是否会被系统自动暂停
});
}
}
</script>
7、开启定位
loc.startLocation()
示例代码
<script>
//持续定位插件对象
var loc = uni.requireNativePlugin('AMap-Loc');
export default {
data() {
},
onLoad() {
...
},
startLocation() {
//检查定位是否开启
var ret = loc.isLocationRunning();
if (ret == false) {
//开始定位
loc.startLocation();
} else {
uni.showToast({
title:"已经开启定位"
});
}
}
}
</script>
8、停止定位
loc.stopLocation()
示例代码
<script>
//持续定位插件对象
var loc = uni.requireNativePlugin('AMap-Loc');
export default {
data() {
},
onLoad() {
...
},
stopLocation() {
//检查定位是否开启
var ret = loc.isLocationRunning();
if (ret == true) {
//停止定位
loc.stopLocation();
};
}
}
</script>