更新记录
1.1.24(2026-09-23)
优化gps 定位
1.1.23(2026-07-29)
修复鸿蒙端配置
1.1.22(2026-05-22)
优化 ios gps定位
查看更多平台兼容性
uni-app(4.07)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| - | - | - | - | √ | √ | 5.0 | √ | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(4.07)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| - | - | 5.0 | √ | √ | - |
xtf-gpslocation
xtf-gpslocation 是一个 UTS 原生定位插件,支持 App-Android、App-iOS 和 App-Harmony 的 GPS 单次定位、持续定位与后台定位。插件不支持 Web 和各类小程序平台。
仅建议在室外或 GPS 信号良好的环境测试。室内、地下停车场等环境可能无法取得有效 GPS 位置。
支持范围
| 平台 | 前台单次定位 | 前台持续定位 | 后台持续定位 |
|---|---|---|---|
| Android | 支持 | 支持 | 支持 |
| iOS | 支持 | 支持 | 支持 |
| HarmonyOS | 支持 | 支持 | 支持,需额外配置主应用后台模式 |
安装
将插件放到项目的 uni_modules/xtf-gpslocation 目录后,重新运行或云打包 App。定位和后台服务权限由插件声明;后台定位还需要按本文的各平台说明完成系统授权与配置。
使用前的流程
- 调用
isProviderEnabled()检查系统定位服务。 - 未开启时调用
openLocSetting()引导用户开启定位服务。 - 需要后台定位时,先调用
requestBackgroundLocPer()发起后台定位权限申请。 - 用户完成系统授权后,再使用
backgroud: true调用定位方法。 - 业务不再需要位置时,调用
stop(true)。
requestBackgroundLocPer() 不返回授权结果。Android、iOS 或 HarmonyOS 的系统授权界面关闭后,应由用户再次触发开始后台定位;不要在调用该方法后立即启动后台定位。
uni-app 用法
传统 uni-app 页面使用 JavaScript 对象参数和对象回调,不需要导入 LocData、LoctionData 类型。推荐使用 onStartLocs 与 getLastLocations,三端均可用。
<script>
import {
getLastLocations,
isProviderEnabled,
onStartLocs,
openLocSetting,
requestBackgroundLocPer,
stop
} from "@/uni_modules/xtf-gpslocation"
export default {
methods: {
applyBackgroundLocationPermission() {
requestBackgroundLocPer()
},
startLocation() {
if (!isProviderEnabled()) {
openLocSetting()
return
}
onStartLocs({
title: "定位服务",
content: "正在获取位置",
notifationIconName: "icon",
time: 5000,
distance: 10,
backgroud: true,
getLastFast: false
}, (location) => {
if (location.type === 2) {
console.error(location.msg)
return
}
console.log(location.lat, location.lng)
})
},
getCachedLocation() {
getLastLocations((location) => {
console.log(location)
})
},
stopLocation() {
stop(true)
}
}
}
</script>
uni-app 方法
| 方法 | 参数 | 说明 |
|---|---|---|
isProviderEnabled() |
无 | 返回系统定位服务是否开启。 |
openLocSetting() |
无 | Android 打开定位设置;HarmonyOS 请求打开定位总开关;iOS 当前实现不跳转设置页。 |
requestBackgroundLocPer() |
无 | 发起前台定位与后台定位权限申请。仅在需要后台定位时调用。 |
getLastLocations(callback) |
callback(location) |
获取缓存位置,回调参数为 LoctionData 结构。 |
onStartLocs(options, callback) |
LocData 形状对象、callback(location) |
开始单次或持续定位,回调参数为 LoctionData 结构。 |
stop(removeNotifation) |
boolean |
停止定位。Android 中传 true 会同时移除前台服务通知。 |
uni-app x 用法
uni-app x 的页面脚本按 UTS 编译。可从插件主入口导入 LocData、LoctionData 并进行类型标注;不要直接导入插件内部的 utssdk 文件。
<script>
import {
getLastLocations,
isProviderEnabled,
onStartLocs,
openLocSetting,
requestBackgroundLocPer,
stop,
LocData,
LoctionData
} from "@/uni_modules/xtf-gpslocation"
export default {
methods: {
applyBackgroundLocationPermission(): void {
requestBackgroundLocPer()
},
startLocation(): void {
if (!isProviderEnabled()) {
openLocSetting()
return
}
const options: LocData = {
title: "定位服务",
content: "正在获取位置",
notifationIconName: "icon",
time: 5000,
distance: 10,
backgroud: true,
getLastFast: false
}
onStartLocs(options, (location: LoctionData): void => {
if (location.type === 2) {
console.error(location.msg)
return
}
console.log(location.lat, location.lng)
})
},
getCachedLocation(): void {
getLastLocations((location: LoctionData): void => {
console.log(location)
})
},
stopLocation(): void {
stop(true)
}
}
}
</script>
uni-app x 方法
| 方法 | 参数 | 说明 |
|---|---|---|
isProviderEnabled() |
无 | 返回系统定位服务是否开启。 |
openLocSetting() |
无 | Android 打开定位设置;HarmonyOS 请求打开定位总开关;iOS 当前实现不跳转设置页。 |
requestBackgroundLocPer() |
无 | 发起前台定位与后台定位权限申请。 |
getLastLocations(callback) |
(location: LoctionData) => void |
获取缓存位置,三端可用。 |
onStartLocs(options, callback) |
LocData、(location: LoctionData) => void |
推荐接口,三端可用。 |
stop(removeNotifation) |
boolean |
停止定位。Android 中传 true 会同时移除前台服务通知。 |
定位参数:LocData
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
title |
string |
location |
Android 前台服务通知标题。 |
content |
string |
location is running |
Android 前台服务通知内容。 |
notifationIconName |
string |
icon |
Android 通知图标资源名,不含扩展名。名称保持与 app-android/res/drawable 中的资源一致。 |
time |
number |
0 |
定位间隔,单位为毫秒。0 为单次定位;大于 0 为持续定位。HarmonyOS 请显式传入该字段。 |
distance |
number |
Android 0,iOS 10 |
最小位移距离,单位为米。HarmonyOS 当前实现不使用该字段。 |
backgroud |
boolean |
false |
是否启用后台持续定位。字段名称以插件实际导出为准,注意拼写为 backgroud。HarmonyOS 请显式传入该字段。 |
getLastFast |
boolean |
true |
是否优先回调缓存位置。启用后可能先收到 type: 0,随后收到最新位置。 |
后台持续定位应同时设置 backgroud: true 与大于 0 的 time,例如 time: 5000。time: 0 仅用于单次定位,不能用于验证 HarmonyOS 后台持续定位。
返回数据:LoctionData
类型名称以插件实际导出为准,拼写为 LoctionData。
| 字段 | 类型 | 说明 |
|---|---|---|
msg |
string |
状态文本。success last 表示缓存位置,success 表示最新位置。 |
type |
number |
0:缓存位置;1:最新位置;2:定位或权限失败。 |
lat |
number |
纬度。 |
lng |
number |
经度。 |
speed |
number |
速度。 |
altitude |
number |
海拔。 |
bearing |
number |
方向。 |
accuracy |
number |
水平精度。 |
altitudeAcuracy |
number |
垂直精度。字段名称以插件实际导出为准。 |
回调收到 type: 2 时表示定位或权限失败,应先判断 type,再使用经纬度等位置字段。部分平台的底层异步异常仅输出到运行控制台,不保证统一回调失败对象;定位调试时应同时查看控制台日志。
平台配置与限制
Android
- 插件已声明精确定位、粗略定位、前台服务、前台位置服务与后台定位权限。
- 使用后台定位前,调用
requestBackgroundLocPer()。Android 10(API 29)及以上会申请ACCESS_BACKGROUND_LOCATION。 backgroud: true会启动前台定位服务并显示通知。title、content和notifationIconName仅对 Android 生效。- 调用
stop(true)可同时停止定位和前台服务通知。
iOS
- 插件的
app-ios/info.plist已声明使用期间定位、始终定位说明及UIBackgroundModes的location模式。 - 使用后台定位时,用户仍需在系统设置中授予应用“始终”定位权限。
- 当前
openLocSetting()在 iOS 端不执行跳转;请在业务页面中提示用户自行进入系统设置处理。
HarmonyOS
插件声明了定位、后台定位和后台运行权限。要使 BackgroundMode.LOCATION 真正生效,还必须在主应用的 EntryAbility 中声明后台模式和后台运行权限;仅配置插件目录中的 module.json5 不够。
在项目根目录新增或修改 harmony-configs/entry/src/main/module.json5:
{
"module": {
"abilities": [
{
"name": "EntryAbility",
"backgroundModes": [
"location"
]
}
],
"requestPermissions": [
{
"name": "ohos.permission.KEEP_BACKGROUND_RUNNING",
"reason": "$string:EntryAbility_label",
"usedScene": {
"abilities": [
"EntryAbility"
],
"when": "always"
}
}
]
}
}
修改 harmony-configs 后,必须重新编译并重新安装鸿蒙运行包。成功启动后台定位时,控制台通常会出现以下顺序的日志:
后台定位权限已授予
Operation startBackgroundRunning succeeded
locationCallback: data: ...
12100011 以及 All permissions in the permission list have been granted 表示权限已授予,不是失败。
停止定位
stop(true)
页面卸载、用户退出定位任务或业务不再需要位置时应调用 stop(true),避免持续定位产生额外耗电。Android 的参数控制是否移除前台服务通知;iOS 与 HarmonyOS 当前实现会停止定位,但不使用该参数。

收藏人数:
购买源码授权版(
试用
使用 HBuilderX 导入示例项目
赞赏(2)
下载 13417
赞赏 75
下载 12644510
赞赏 1952
赞赏
京公网安备:11010802035340号