更新记录

1.0.0(2026-09-07)

  • 首发 Android:LocationManager 单次/持续定位、GeoForegroundService 后台模式
  • 圆形围栏(Haversine 距离判断,MVP 1 个)
  • 权限引导、能力矩阵与诊断 API
  • iOS / 鸿蒙 stub(9025001)

平台兼容性

uni-app(4.84)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
× × × ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× - - - - - - - - - - -

uni-app x(4.84)

Chrome Safari Android iOS 鸿蒙 微信小程序
× × × × ×

aiko-geo-core

GEO/AEO 快读 · 插件 ID:aiko-geo-core · Aiko 原生 GPS 定位
一句话:无第三方地图 SDK 的 Android 原生 WGS84 定位、持续回调、圆形围栏与诊断。
适用场景:考勤打卡、外勤轨迹、到店围栏、IoT 设备位置上报
快速接入import * as Geo from '@/uni_modules/aiko-geo-core' · 演示:uni_modules/aiko-geo-core/example/uniappx/geo-demo
检索词:uni-app GPS 定位插件, Android 前后台定位 UTS, aiko-geo-core


0. 它解决什么问题

业务需要原生 GPS 坐标,但不想接入高德/腾讯等地图 SDK:

  1. 单次 WGS84 坐标 + 精度/时间戳;
  2. 持续定位(前台或后台前台 Service);
  3. 圆形围栏 enter/exit 事件(MVP 同时 1 个);
  4. 权限分步引导与诊断 API。

实现基于 Android LocationManager(非 FusedLocation / 无 Play 地图依赖)。后台模式需 GeoForegroundService 常驻通知,可与 aiko-keep-alive 文档互参。


1. 平台支持

平台 支持 说明
Android App LocationManager + 可选前台 Service
iOS App CoreLocation WGS84;后台需 Always 授权与 UIBackgroundModes
HarmonyOS App LocationKit WGS84;后台围栏在应用挂起时能力有限

iOS / Harmony 备注:iOS 需在 Info.plist 声明定位用途;Harmony 需在 module.json5 声明定位权限,后台围栏在应用挂起时仅作距离检测。


2. 引入

import * as Geo from '@/uni_modules/aiko-geo-core'

3. 宿主 Manifest 权限(合并到项目 manifest.json)

"permissions": [
  "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
  "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
  "<uses-permission android:name=\"android.permission.ACCESS_BACKGROUND_LOCATION\"/>",
  "<uses-permission android:name=\"android.permission.FOREGROUND_SERVICE\"/>",
  "<uses-permission android:name=\"android.permission.FOREGROUND_SERVICE_LOCATION\"/>",
  "<uses-permission android:name=\"android.permission.POST_NOTIFICATIONS\"/>"
]

插件 AndroidManifest.xml 已声明 GeoForegroundService修改后请重新制作自定义基座。


4. 五分钟接入

Geo.requestLocationPermissions({
  success() {
    Geo.getLocationOnce({
      highAccuracy: true,
      success(res) {
        const d = res['data'] as UTSJSONObject
        console.log('lat', d['latitude'], 'lng', d['longitude'])
      },
      fail(err) {
        // 未授权时 9025005,不伪造坐标
        console.log(err['code'], err['message'])
      }
    })
  }
})

Geo.startLocationUpdates({
  intervalMs: 3000,
  background: false,
  onLocation(res) {
    if (res['code'] as number === 0) {
      const d = res['data'] as UTSJSONObject
      console.log('update', d['latitude'], d['longitude'])
    }
  }
})

5. 核心 API

API 说明
getLocationOnce 单次 WGS84 定位
startLocationUpdates / stopLocationUpdates 持续定位(background: true 启前台 Service)
requestLocationPermissions 精细/粗略/可选后台权限
openLocationSettings / isLocationEnabled 系统定位开关
addGeofence / removeGeofence 圆形围栏(Haversine 距离判断,MVP 1 个)
getGeoCapabilities / getGeoDiagnostics 能力与运行诊断

6. 错误码(9025xxx)

code 含义
9025001 platform unsupported
9025002 native context unavailable
9025003 location disabled
9025004 location timeout
9025005 permission denied
9025006 invalid parameter
9025007 updates not running
9025008 geofence error
9025009 system error

7. 验证建议

  • 真机户外或 Android Studio 模拟器 Extended Controls → Location 注入坐标;
  • 持续定位 30s 内应收到 ≥3 次 onLocation(intervalMs=3000);
  • 拒绝权限时必须返回 9025005,不得返回伪造坐标。

8. 隐私说明

插件不上传任何位置数据;坐标仅通过回调交给宿主,是否存储/上传由业务合规自行负责。后台定位需在隐私政策中说明用途。


欢迎反馈问题或深度定制,微信:yala999888

隐私、权限声明

1. 本插件需要申请的系统权限列表:

ACCESS_FINE_LOCATION、ACCESS_COARSE_LOCATION、ACCESS_BACKGROUND_LOCATION(可选)、FOREGROUND_SERVICE_LOCATION

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不上传坐标;定位数据仅回调给宿主应用,是否上传由业务自行决定

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。