更新记录
1.6.1(2026-04-19) 下载此版本
新增功能
-
调试日志控制
- 新增
setDebugLogEnabled(enabled)方法,控制是否输出调试日志 - 新增
isDebugLogEnabled()方法,获取调试日志开关状态 - 默认关闭调试日志,仅输出错误日志
- 新增
-
定位轮询间隔配置
- 新增
setLocationPollingInterval(intervalMs)方法,自定义定位轮询间隔 - 新增
getLocationPollingInterval()方法,获取当前轮询间隔 - 最小间隔限制为 1000ms,防止频繁定位消耗电量
- 新增
问题修复
-
UTS 类型转换问题修复
- 修复
java.lang.Integer cannot be cast to java.lang.Long类型转换错误 - 修复
java.lang.Float cannot be cast to java.lang.Integer类型转换错误 - 使用
.toLong()替代as Long进行类型转换 - 使用
java.lang.Math.round()进行 Float 到 Int 的安全转换
- 修复
-
Map 类型兼容性问题修复
- 修复
hasPermissions()返回的 Map 类型在 JS 端无法访问的问题 - 将
Map<string, boolean>改为UTSJSONObject,支持 JS 端直接属性访问
- 修复
-
调试日志开关失效问题修复
- 将定位模块中的调试日志从
console.log改为debugLog函数 - 确保调试日志开关能正确控制日志输出
- 将定位模块中的调试日志从
技术优化
- 遵循 UTS 编译器已知问题规范,避免类型转换陷阱
- 优化日志输出,区分调试日志和错误日志
1.4.1(2026-04-18) 下载此版本
UTS 编译器兼容性修复
-
修复 iOS 平台编译错误
- 修复
performSelectorSwift 命名参数语法问题 - 改用 UTS 兼容的
perform(selector)调用
- 修复
-
修复 Android 平台编译错误
- 修复匿名类构造函数问题(UTS 不支持匿名类构造函数)
- 将
LocationListener匿名类改为命名类LocationListenerImpl - 将
Runnable匿名类改为命名类TimerRunnableImpl - 修复
shouldShowRequestPermissionRationale方法调用问题 - 修复数组类型转换问题,使用
toTypedArray()转换
-
代码规范优化
- 遵循 UTS 编译器已知问题规范
- 移除不支持的语法模式
- 确保三端代码一致性
1.1.2(2026-03-16) 下载此版本
修复问题
- 修复iOS平台UTS语法兼容性问题
- 移除Swift命名参数语法(如
URL(string:)、Timer.scheduledTimer(withTimeInterval:)) - 使用
NSURL.URLWithString()替代URL(string:) - 使用 ES6 标准
setInterval/clearInterval实现定时器功能
- 移除Swift命名参数语法(如
- 修复Android平台UTS语法兼容性问题
- 修复类名与导出函数冲突问题(
KeepLive类改名为KeepLiveImpl) - 修复
Icon.createWithResource参数类型问题 - 修复
List遍历问题,使用iterator()替代toArray() - 修复
CrashHandler接口实现,使用Throwable类型 - 修复
Notification.Builder链式调用问题 - 修复多处
number到Int/Long类型转换问题
- 修复类名与导出函数冲突问题(
优化改进
- iOS平台定时器使用标准ES6 API实现,提高兼容性
- Android平台前台服务通知使用
Icon.createWithResource()API - 统一所有平台的定时器实现方式
平台兼容性
uni-app(5.03)
| Vue2 | Vue3 | Vue3插件版本 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|
| √ | √ | 1.0.0 | - | - | √ | √ | √ | √ | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(5.03)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| - | - | √ | √ | √ | - |
cy-Keepalive 应用保活插件
插件简介
cy-Keepalive 是一款专为 UniApp 应用设计的保活插件,支持 Android、iOS、鸿蒙三平台。该插件复刻自 android-keeplive 插件,通过多种保活策略确保应用在后台持续运行,防止系统自动终止进程,维持关键服务的稳定运行。
项目架构
插件采用模块化架构设计,各平台代码按功能模块拆分,index.uts 仅作为入口文件:
utssdk/
├── interface.uts # 接口定义(跨平台共享)
├── unierror.uts # 错误处理
├── app-android/ # Android 平台
│ ├── index.uts # 入口文件
│ ├── types.uts # 类型定义
│ ├── notification.uts # 通知管理
│ ├── wakelock.uts # 唤醒锁管理
│ ├── music.uts # 后台音乐
│ ├── permission.uts # 权限管理
│ ├── timer.uts # 定时器
│ ├── receiver.uts # 广播接收器
│ └── location.uts # 后台持续定位
├── app-ios/ # iOS 平台
│ ├── index.uts # 入口文件
│ ├── types.uts # 类型定义
│ ├── notification.uts # 通知管理
│ ├── wakelock.uts # 唤醒锁管理
│ ├── permission.uts # 权限管理
│ ├── timer.uts # 定时器
│ └── location.uts # 后台持续定位
└── app-harmony/ # 鸿蒙平台
├── index.uts # 入口文件
├── types.uts # 类型定义
├── notification.uts # 通知管理
├── wakelock.uts # 唤醒锁管理
├── permission.uts # 权限管理
├── timer.uts # 定时器
└── location.uts # 后台持续定位
架构优势
- 模块化设计 - 每个功能独立成模块,职责单一
- 易于维护 - 修改某功能只需修改对应模块
- 代码复用 - 模块间依赖清晰,可复用
- 入口简洁 -
index.uts仅负责组合各模块
平台支持
| 平台 | 支持情况 |
|---|---|
| Android | ✅ 支持 (API 21+) |
| iOS | ✅ 支持 (iOS 12+) |
| HarmonyOS | ✅ 支持 (API 10+) |
| Web | ❌ 不支持 |
| 小程序 | ❌ 不支持 |
安装方式
- 将
uni_modules/cy-Keepalive目录复制到项目的uni_modules目录下 - 在 HBuilderX 中重新编译项目
保活策略说明
Android 平台
| 策略 | 说明 |
|---|---|
| ForegroundService | 前台服务,显示常驻通知,最高优先级保活 |
| BackgroundMusic | 后台无声音乐保活 |
| WakeLock | 电源锁,防止CPU休眠 |
| WiFiLock | WiFi锁,防止休眠时WiFi断开 |
| SystemTimer | 系统定时器,息屏也能执行 |
| AlarmTimer | Alarm定时器,精准定时执行 |
| 电池优化白名单 | 引导用户将应用加入电池优化白名单 |
iOS 平台
| 策略 | 说明 |
|---|---|
| BackgroundTask | 后台任务,iOS提供的后台执行时间 |
| BackgroundAudio | 后台音频,播放静音音频保持后台运行 |
| SystemTimer | 系统定时器 |
鸿蒙平台
| 策略 | 说明 | 支持情况 |
|---|---|---|
| BackgroundTask | 后台任务管理 | ✅ |
| Notification | 通知发布 | ✅ |
| SystemTimer | 系统定时器 | ✅ |
| 权限管理 | 权限检查和请求 | ✅ |
API 文档
基本使用
// #ifdef APP
import { KeepLive } from '@/uni_modules/cy-Keepalive'
// #endif
// 创建实例
const keep = new KeepLive()
// 设置通知配置
keep.setTitle("app")
keep.setContent("app is running")
keep.setSmallIcon("icon")
// 添加回调
keep.onAddBackgroundCallback((isBackground: boolean) => {
console.log("后台运行状态: " + isBackground)
})
keep.onAddScreenListenerCallback((isScreenOn: boolean) => {
console.log("屏幕状态: " + isScreenOn)
})
keep.onAddNotificationClickListener((data: string) => {
console.log("通知点击: " + data)
})
// 设置唤醒锁
keep.setWakeLock(1, "keeptag")
// 启动保活
keep.register()
// 启动系统定时器
keep.onStartCSystemTimer(60, () => {
console.log("定时器触发")
keep.acquire(1000) // 唤醒1秒
})
完整API列表
平台支持标识:✅ 支持 | ❌ 不支持 | ⚠️ 部分支持
通知相关
| 方法 | 参数 | 说明 | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|
setTitle(title) |
title: string | 设置通知标题 | ✅ | ✅ | ✅ |
setContent(content) |
content: string | 设置通知内容 | ✅ | ✅ | ✅ |
setSmallIcon(iconName) |
iconName: string | 设置通知小图标 | ✅ | ✅ | ✅ |
setLargeIcon(iconName) |
iconName: string | 设置通知大图标 | ✅ | ✅ | ✅ |
setChannelId(channelId) |
channelId: string | 设置通知Channel ID | ✅ | ✅ | ✅ |
setChannelName(channelName) |
channelName: string | 设置通知Channel名称 | ✅ | ✅ | ✅ |
setChannelImportance(importance) |
importance: number (1-3) | 设置通知重要性 | ✅ | ✅ | ✅ |
setLockscreenVisibility(visibility) |
visibility: number | 设置锁屏可见性 | ✅ | ✅ | ✅ |
enableVibration(enable) |
enable: boolean | 设置是否启用震动 | ✅ | ✅ | ✅ |
setNotifaicationSoundEnable(enable) |
enable: boolean | 设置通知是否静音 | ✅ | ✅ | ✅ |
setNotifationId(id) |
id: number | 设置通知ID | ✅ | ✅ | ✅ |
setNotifationMsgGroup(group) |
group: string | 设置通知分组 | ✅ | ✅ | ✅ |
setNotifationExterData(data) |
data: string | 设置通知附属信息 | ✅ | ✅ | ✅ |
setAutoCancel(autoCancel) |
autoCancel: boolean | 设置通知是否点击取消 | ✅ | ✅ | ✅ |
updateNotification() |
- | 更新通知 | ✅ | ✅ | ✅ |
cancelNotifation(id) |
id: number | 取消指定ID的通知 | ✅ | ✅ | ✅ |
cancelGroupNotifaon(group) |
group: string | 取消组通知 | ✅ | ✅ | ⚠️ |
保活控制
| 方法 | 参数 | 说明 | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|
register() |
- | 注册保活服务 | ✅ | ✅ | ✅ |
unregister() |
- | 取消保活服务 | ✅ | ✅ | ✅ |
restart() |
- | 重启保活服务 | ✅ | ✅ | ✅ |
isRunning() |
- | 返回是否正在运行 | ✅ | ✅ | ✅ |
权限相关
| 方法 | 参数 | 说明 | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|
checkAppNotification() |
- | 检查通知权限是否开启 | ✅ | ✅ | ✅ |
goNotificationSetting() |
- | 打开通知设置 | ✅ | ✅ | ✅ |
onOpenNotificationSetting(callback) |
callback: function | 打开通知设置并回调 | ✅ | ✅ | ✅ |
isIgnoringBatteryOptimizations() |
- | 是否忽略电池优化 | ✅ | ❌ | ✅ |
requestIgnoreBatteryOptimizations() |
- | 请求忽略电池优化 | ✅ | ❌ | ⚠️ |
唤醒锁
| 方法 | 参数 | 说明 | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|
setWakeLock(type, tag) |
type: number, tag: string | 设置唤醒锁类型 | ✅ | ✅ | ✅ |
acquire(timeout) |
timeout: number | 唤醒CPU | ✅ | ✅ | ⚠️ |
releaseAcquire() |
- | 释放唤醒锁 | ✅ | ✅ | ⚠️ |
后台音乐
| 方法 | 参数 | 说明 | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|
setBackgroundMusicEnabled(enabled) |
enabled: boolean | 设置后台音乐是否启用 | ✅ | ✅ | ⚠️ |
setMusicVol(vol) |
vol: number (0-1) | 设置后台音乐音量 | ✅ | ✅ | ⚠️ |
setMusicId(musicId) |
musicId: string | 设置后台音乐资源ID | ✅ | ✅ | ⚠️ |
回调
| 方法 | 参数 | 说明 | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|
onAddBackgroundCallback(callback) |
callback: function | 添加后台状态回调 | ✅ | ✅ | ✅ |
onAddScreenListenerCallback(callback) |
callback: function | 添加屏幕状态回调 | ✅ | ✅ | ✅ |
onAddNotificationClickListener(callback) |
callback: function | 添加通知点击回调 | ✅ | ✅ | ✅ |
其他功能
| 方法 | 参数 | 说明 | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|
setAutoStartEnable(enable) |
enable: boolean | 设置是否启用自启动 | ✅ | ⚠️ | ⚠️ |
doStartApplicationWithPackageName(packageName) |
packageName: string | 通过包名/URL启动应用 | ✅ | ✅ | ⚠️ |
hideRecentTask(hide) |
hide: boolean | 隐藏最近任务 | ✅ | ⚠️ | ⚠️ |
goAndroidSystemAppSetting() |
- | 打开系统应用设置 | ✅ | ✅ | ✅ |
setCrashRestartUIEnabled(enabled) |
enabled: boolean | 设置崩溃后是否重启 | ✅ | ✅ | ⚠️ |
wifilock() |
- | WiFi锁定 | ✅ | ⚠️ | ⚠️ |
wifiunlock() |
- | WiFi解锁 | ✅ | ⚠️ | ⚠️ |
toBackground() |
- | 退出到后台 | ✅ | ✅ | ⚠️ |
getLiveTime() |
- | 获取保活存活时间(毫秒) | ✅ | ✅ | ✅ |
定时器
| 方法 | 参数 | 说明 | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|
onStartCSystemTimer(intervalSeconds, callback) |
intervalSeconds: number, callback: function | 启动系统定时器 | ✅ | ✅ | ✅ |
cancelCSystemTimer() |
- | 取消系统定时器 | ✅ | ✅ | ✅ |
clearAllCTimer() |
- | 取消所有系统定时器 | ✅ | ✅ | ✅ |
startAleraTask(startTime, interval, callback) |
startTime: number, interval: number, callback: function | 启动Alarm定时器 | ✅ | ✅ | ✅ |
cancleAleraTask() |
- | 取消Alarm定时器 | ✅ | ✅ | ✅ |
权限管理
| 方法 | 参数 | 说明 | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|
checkPermission(permission) |
permission: PermissionType | 检查权限状态 | ✅ | ✅ | ✅ |
requestPermission(permission, callback) |
permission: PermissionType, callback: function | 请求单个权限 | ✅ | ✅ | ✅ |
hasPermissions(permissions) |
permissions: PermissionType[] | 批量检查权限 | ✅ | ✅ | ✅ |
requestPermissions(permissions, callback) |
permissions: PermissionType[], callback: function | 批量请求权限 | ✅ | ✅ | ✅ |
openPermissionSettings() |
- | 打开权限设置页面 | ✅ | ✅ | ⚠️ |
openBatteryOptimizationSettings() |
- | 打开电池优化设置页面 | ✅ | ❌ | ⚠️ |
openAppSettings() |
- | 打开应用设置页面 | ✅ | ✅ | ⚠️ |
openLocationSettings() |
- | 打开定位设置页面 | ✅ | ✅ | ⚠️ |
后台持续定位
| 方法 | 参数 | 说明 | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|
setLocationConfig(config) |
config: LocationConfig | 设置定位配置 | ✅ | ✅ | ✅ |
startLocationUpdates(callback, errorCallback) |
callback: LocationCallback, errorCallback: LocationErrorCallback | 开始持续定位 | ✅ | ✅ | ✅ |
stopLocationUpdates() |
- | 停止定位 | ✅ | ✅ | ✅ |
getLastKnownLocation() |
- | 获取最后已知位置 | ✅ | ✅ | ✅ |
isLocationEnabled() |
- | 检查定位服务是否开启 | ✅ | ✅ | ✅ |
requestLocationPermission() |
- | 请求定位权限 | ✅ | ✅ | ✅ |
onNetworkStatusChange(callback) |
callback: NetworkStatusCallback | 监听网络状态变化 | ✅ | ⚠️ | ⚠️ |
setDebugLogEnabled(enabled) |
enabled: boolean | 设置是否开启调试日志 | ✅ | ⚠️ | ⚠️ |
isDebugLogEnabled() |
- | 获取调试日志开关状态 | ✅ | ⚠️ | ⚠️ |
setLocationPollingInterval(intervalMs) |
intervalMs: number | 设置定位轮询间隔(毫秒) | ✅ | ⚠️ | ⚠️ |
getLocationPollingInterval() |
- | 获取定位轮询间隔 | ✅ | ⚠️ | ⚠️ |
LocationConfig 定位配置
type LocationConfig = {
priority: number // 精度优先级:0=高精度, 1=平衡, 2=低功耗
interval: number // 定位更新间隔(毫秒),默认1000
minDistance: number // 最小更新距离(米),默认0
}
LocationInfo 位置信息
type LocationInfo = {
latitude: number // 纬度
longitude: number // 经度
altitude: number // 海拔(米)
accuracy: number // 精度(米)
speed: number // 速度(米/秒)
bearing: number // 方向(度)
timestamp: number // 时间戳(毫秒)
provider: string // 定位提供者
}
定位使用示例
// 开启调试日志(可选,用于排查问题)
keep.setDebugLogEnabled(true)
// 配置定位参数
keep.setLocationConfig({
priority: 0, // 高精度模式
interval: 1000, // 每秒更新
minDistance: 0 // 无最小距离限制
})
// 设置定位轮询间隔(可选,默认2000ms,最小1000ms)
keep.setLocationPollingInterval(3000)
// 开始持续定位
keep.startLocationUpdates(
(location: LocationInfo) => {
console.log(`纬度: ${location.latitude}, 经度: ${location.longitude}`)
console.log(`精度: ${location.accuracy}m, 提供者: ${location.provider}`)
},
(error: string) => {
console.log(`定位错误: ${error}`)
}
)
// 监听网络状态变化
keep.onNetworkStatusChange((isConnected: boolean) => {
console.log(`网络状态: ${isConnected ? '已连接' : '已断开'}`)
})
// 获取最后已知位置
const lastLocation = keep.getLastKnownLocation()
if (lastLocation != null) {
console.log(`最后位置: ${lastLocation.latitude}, ${lastLocation.longitude}`)
}
// 停止定位
keep.stopLocationUpdates()
// 关闭调试日志
keep.setDebugLogEnabled(false)
智能定位策略说明
本插件采用并行定位策略,而非优先级选择机制:
- Android:同时启用GPS和Network定位提供者,通过智能位置选择算法自动选择最佳位置
- iOS:配置
activityType为导航类型,GPS卫星定位不依赖网络 - 鸿蒙:使用
geoLocationManager持续定位,支持多种定位场景 - 网络状态感知:实时监测网络变化,动态调整定位策略,确保无缝过渡
- 离线定位:GPS卫星定位完全不依赖网络,无网络环境下仍可获取定位数据
PermissionType 权限类型
| 值 | 说明 | Android | iOS | 鸿蒙 |
|---|---|---|---|---|
location |
定位权限(使用时) | ✅ | ✅ | ✅ |
location_always |
始终定位权限 | ✅ | ✅ | ✅ |
background_location |
后台定位权限 | ✅ | ✅ | ✅ |
notification |
通知权限 | ✅ | ✅ | ✅ |
battery_optimization |
电池优化白名单 | ✅ | ❌ | ⚠️ |
camera |
相机权限 | ✅ | ✅ | ✅ |
microphone |
麦克风权限 | ✅ | ✅ | ✅ |
storage |
存储权限 | ✅ | ❌ | ⚠️ |
phone |
电话权限 | ✅ | ❌ | ⚠️ |
contacts |
通讯录权限 | ✅ | ✅ | ✅ |
PermissionStatus 权限状态
type PermissionStatus = {
granted: boolean // 是否已授权
shouldShowRationale: boolean // 是否应该显示解释(用户拒绝过)
canRequest: boolean // 是否可以请求
}
权限使用示例
// 检查权限
const status = keep.checkPermission('camera')
if (!status.granted) {
keep.requestPermission('camera', (granted) => {
if (granted) {
console.log('相机权限已授权')
} else {
keep.openPermissionSettings()
}
})
}
// 批量检查权限
const permissions = ['camera', 'microphone']
const results = keep.hasPermissions(permissions)
results.forEach((granted, permission) => {
console.log(`${permission}: ${granted ? '已授权' : '未授权'}`)
})
// 打开电池优化设置(Android)
keep.openBatteryOptimizationSettings()
完整使用示例
<template>
<view class="container">
<view class="status-card">
<text class="title">保活状态</text>
<text class="status">{{ isRunning ? '运行中' : '已停止' }}</text>
<text class="info">运行时间: {{ formatTime(liveTime) }}</text>
</view>
<view class="btn-group">
<button type="primary" @click="startKeepAlive">启动保活</button>
<button type="warn" @click="stopKeepAlive">停止保活</button>
<button @click="checkStatus">检查状态</button>
</view>
</view>
</template>
<script>
// #ifdef APP
import { KeepLive } from '@/uni_modules/cy-Keepalive'
// #endif
export default {
data() {
return {
isRunning: false,
liveTime: 0,
keep: null
}
},
onLoad() {
// #ifdef APP
this.keep = KeepLive()
this.checkStatus()
// #endif
},
methods: {
startKeepAlive() {
// #ifdef APP
this.keep.setTitle("我的应用")
this.keep.setContent("应用正在后台运行")
this.keep.setSmallIcon("icon")
this.keep.onAddBackgroundCallback((isBackground) => {
console.log("后台状态: " + isBackground)
})
this.keep.setWakeLock(1, "keeptag")
this.keep.setAutoStartEnable(true)
if (!this.keep.checkAppNotification()) {
this.keep.onOpenNotificationSetting((enabled) => {
this.keep.register()
if (!this.keep.isIgnoringBatteryOptimizations()) {
this.keep.requestIgnoreBatteryOptimizations()
}
})
} else {
this.keep.register()
if (!this.keep.isIgnoringBatteryOptimizations()) {
this.keep.requestIgnoreBatteryOptimizations()
}
}
this.keep.onStartCSystemTimer(60, () => {
console.log("定时器触发")
this.keep.acquire(1000)
})
this.isRunning = true
// #endif
},
stopKeepAlive() {
// #ifdef APP
this.keep.unregister()
this.isRunning = false
// #endif
},
checkStatus() {
// #ifdef APP
this.isRunning = this.keep.isRunning()
this.liveTime = this.keep.getLiveTime()
// #endif
},
formatTime(ms) {
if (!ms) return '0秒'
const seconds = Math.floor(ms / 1000)
const minutes = Math.floor(seconds / 60)
const hours = Math.floor(minutes / 60)
if (hours > 0) {
return `${hours}小时${minutes % 60}分钟`
} else if (minutes > 0) {
return `${minutes}分钟${seconds % 60}秒`
} else {
return `${seconds}秒`
}
}
}
}
</script>
权限配置
Android 权限
插件已内置必要的权限配置:
FOREGROUND_SERVICE- 前台服务权限FOREGROUND_SERVICE_SPECIAL_USE- 特殊前台服务权限WAKE_LOCK- 电源锁权限REQUEST_IGNORE_BATTERY_OPTIMIZATIONS- 请求忽略电池优化权限RECEIVE_BOOT_COMPLETED- 开机自启动权限POST_NOTIFICATIONS- 通知权限 (Android 13+)INTERNET- 网络权限ACCESS_WIFI_STATE- WiFi状态权限CHANGE_WIFI_STATE- 修改WiFi状态权限ACCESS_NETWORK_STATE- 网络状态权限ACCESS_FINE_LOCATION- 精确定位权限ACCESS_COARSE_LOCATION- 粗略定位权限ACCESS_BACKGROUND_LOCATION- 后台定位权限 (Android 10+)
iOS 配置
插件已内置后台模式配置:
audio- 后台音频fetch- 后台获取processing- 后台处理location- 后台定位
插件已内置定位权限描述:
NSLocationWhenInUseUsageDescription- 使用时定位权限描述NSLocationAlwaysAndWhenInUseUsageDescription- 始终定位权限描述NSLocationAlwaysUsageDescription- 始终定位权限描述(兼容旧版)
鸿蒙配置
插件已内置权限配置:
ohos.permission.CAMERA- 相机权限ohos.permission.MICROPHONE- 麦克风权限ohos.permission.READ_CONTACTS- 通讯录读取权限ohos.permission.KEEP_BACKGROUND_RUNNING- 后台长时任务权限ohos.permission.APPROXIMATELY_LOCATION- 粗略定位权限ohos.permission.LOCATION- 精确定位权限ohos.permission.LOCATION_IN_BACKGROUND- 后台定位权限
重要说明
回调函数生命周期
重要: HBuilderX 4.25+ 版本后,UTS插件导出方法中的回调函数参数触发一次后会自动回收。
本插件已为所有需要持续触发的回调方法添加 @UTSJS.keepAlive 装饰器,确保回调函数可以多次执行。涉及的方法包括:
onStartCSystemTimer- 系统定时器回调startAleraTask- Alarm定时器回调onAddBackgroundCallback- 后台状态回调onAddScreenListenerCallback- 屏幕状态回调onAddNotificationClickListener- 通知点击回调onOpenNotificationSetting- 通知设置回调
参考文档: UTS插件回调函数说明
注意事项
- 自定义基座: Android/iOS端需要自定义基座才能使用
- iOS配置: uniapp端需要在manifest.json配置后台运行能力 audio,fetch
- 合规使用: 请确保保活功能符合应用商店审核规范
- 用户知情: 使用保活功能时应告知用户
- 资源消耗: 保活会消耗额外的系统资源,请合理使用
- 系统限制: 不同厂商ROM对后台限制策略不同
更新日志
v1.6.1
- 新增调试日志控制
- 新增
setDebugLogEnabled(enabled)方法,控制是否输出调试日志 - 新增
isDebugLogEnabled()方法,获取调试日志开关状态 - 默认关闭调试日志,仅输出错误日志
- 新增
- 新增定位轮询间隔配置
- 新增
setLocationPollingInterval(intervalMs)方法,自定义定位轮询间隔 - 新增
getLocationPollingInterval()方法,获取当前轮询间隔 - 最小间隔限制为 1000ms
- 新增
- 问题修复
- 修复 UTS 类型转换错误(Integer/Long/Float)
- 修复 Map 类型在 JS 端无法访问的问题
- 修复调试日志开关失效问题
v1.6.0
- 新增后台持续定位模块
- 新增
setLocationConfig、startLocationUpdates、stopLocationUpdates、getLastKnownLocation、isLocationEnabled、requestLocationPermission、onNetworkStatusChangeAPI - 新增
LocationInfo、LocationConfig、LocationCallback、LocationErrorCallback、NetworkStatusCallback类型定义 - 新增 Android/iOS/鸿蒙三平台的
location.uts模块 - Android: 同时启用GPS和Network定位提供者,智能位置选择算法
- Android: 实时监测网络状态变化,动态调整定位策略
- iOS: 使用CLLocationManager实现后台持续定位
- 鸿蒙: 使用geoLocationManager实现持续定位
- 新增 Android 定位相关权限(ACCESS_FINE_LOCATION、ACCESS_COARSE_LOCATION、ACCESS_BACKGROUND_LOCATION)
- 新增 iOS 后台定位模式及定位权限描述
- 新增鸿蒙定位相关权限(APPROXIMATELY_LOCATION、LOCATION、LOCATION_IN_BACKGROUND)
- 新增错误码 9010008(定位服务未启用)、9010009(定位权限未授予)
- 新增
v1.5.0
- 移除定位模块
- 移除
setLocationConfig、startLocationUpdates、stopLocationUpdates、getLastKnownLocation、isLocationEnabled、requestLocationPermissionAPI - 移除
LocationInfo、LocationConfig、LocationCallback、LocationErrorCallback类型定义 - 移除 Android/iOS/鸿蒙三平台的
location.uts模块 - 移除 Android 定位相关权限(ACCESS_FINE_LOCATION、ACCESS_COARSE_LOCATION、ACCESS_BACKGROUND_LOCATION)
- 移除 iOS 后台定位模式及定位权限描述
- 移除鸿蒙定位相关权限(APPROXIMATELY_LOCATION、LOCATION、LOCATION_IN_BACKGROUND)
- 权限管理模块保留定位权限类型(location、location_always、background_location)的检查和请求能力
- 移除
v1.4.1
- UTS 编译器兼容性修复
- 修复 iOS 平台
performSelectorSwift 命名参数语法问题 - 修复 Android 平台匿名类构造函数问题(改为命名类实现)
- 修复 Android 平台
shouldShowRequestPermissionRationale方法调用问题 - 修复 Android 平台数组类型转换问题
- 遵循 UTS 编译器已知问题规范
- 修复 iOS 平台
v1.4.0
- 代码架构重构
- 将三个平台的代码按功能模块拆分
index.uts现在仅作为入口文件- 新增模块:
types.uts、notification.uts、wakelock.uts、permission.uts、timer.uts - Android 平台额外新增:
music.uts、receiver.uts - 提高代码可维护性和可读性
- 多端一致性改进
- iOS 实现本地通知功能(使用 UserNotifications 框架)
- iOS 实现唤醒锁功能(使用后台任务)
- iOS 支持打开 URL Scheme 和应用设置
- iOS 支持切换到后台功能
- 大部分 API 实现双平台一致性
- 鸿蒙平台完善
- 实现权限检查和请求功能(使用 abilityAccessCtrl)
- 添加必要的权限配置
- 完善接口实现,确保三端一致性
v1.3.0
- 新增权限管理模块
- 支持检查和请求各种权限(相机、麦克风、通知等)
- 支持批量权限检查和请求
- 新增打开系统设置页面方法(电池优化、定位设置等)
- Android 支持电池优化白名单检查和设置
v1.1.3
- 修复iOS平台编译错误
- 修复回调函数释放问题,添加@UTSJS.keepAlive装饰器
v1.1.2
- 修复iOS/Android平台UTS语法兼容性问题
v1.1.1
- 修复接口定义方法名拼写错误
- 优化各平台接口实现
v1.1.0
- 完全重构,复刻 android-keeplive 插件全部功能
- 新增鸿蒙平台支持
- 新增后台无声音乐保活
- 新增系统定时器、Alarm定时器
- 新增通知管理功能
- 新增屏幕状态监听
- 新增崩溃自动重启
v1.0.0
- 初始版本发布
技术支持
如有问题,请提交 Issue 或联系开发者。

收藏人数:
下载插件并导入HBuilderX
赞赏(0)
下载 251
赞赏 0
下载 11758538
赞赏 1911
赞赏
京公网安备:11010802035340号