更新记录

1.0.0(2026-10-17) 下载此版本

Android 保活:常驻通知 + 唤醒锁 + 息屏定时任务 + 电池白名单/通知权限引导


平台兼容性

uni-app(5.26)

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

lj-keeplive · Android 后台保活

一行代码启动后台保活。不依赖任何第三方 SDK。

项 值
插件 ID lj-keeplive
当前版本 1.0.0
插件类型 UTS API 插件
支持平台 Android(App)
第三方依赖 无

一、功能

功能 说明
前台服务保活 常驻通知栏通知
唤醒锁 息屏后保持运行,到期自动续期
息屏定时任务 按设定周期在后台触发回调
屏幕状态回调 屏幕点亮 / 熄灭时通知业务层
权限引导 通知权限申请、电池优化白名单、系统设置页跳转

适用场景:后台维持长连接、周期性上报、蓝牙通信、推送协同、息屏后的定时同步。


二、平台支持

平台 支持情况
Android(app-vue / app-nvue,Vue2 / Vue3) ✅ 支持(最低 Android 4.4 / API 19)
iOS ❌ 不支持
鸿蒙 ❌ 不支持
H5、各小程序、快应用 ❌ 不支持

三、使用前提

1. 必须使用自定义基座

标准基座不含插件的原生内容,运行会完全无效。

  • 制作路径:HBuilderX → 运行 → 运行到手机或模拟器 → 制作自定义调试基座
  • 手机上已装过旧基座时,先卸载再安装新的

2. 打包方式

只支持云端传统打包,不支持离线打包、不支持安心打包。


四、快速开始

最小用法

// #ifdef APP
import { register, unregister } from '@/uni_modules/lj-keeplive'

register()      // 启动保活
unregister()    // 停止保活
// #endif

完整用法(含权限引导)

// #ifdef APP
import {
  register,
  unregister,
  isRunning,
  getAliveSeconds,
  getTickCount,
  setNotification,
  setSmallIcon,
  setNotificationId,
  setChannel,
  setTimerInterval,
  setWakeLockTimeout,
  setDebug,
  Tick,
  onScreenStateChange,
  isNotificationEnabled,
  requestNotificationPermission,
  isIgnoringBatteryOptimizations,
  requestIgnoreBatteryOptimizations,
  openNotificationSettings,
  openAppSettings
} from '@/uni_modules/lj-keeplive'

// ---- 1. 配置(在 register 之前调用)----
setDebug(true)
setNotification('应用正在后台运行', '保活服务已启动')
setTimerInterval(60)        // 后台定时任务周期(秒),0 表示关闭
setWakeLockTimeout(600)     // 唤醒锁时长(秒),0 表示不使用

// ---- 2. 注册回调(只需注册一次)----
Tick((count) => {
  console.log('定时任务触发,累计次数:', count)
})

onScreenStateChange((screenOn) => {
  console.log(screenOn ? '屏幕已点亮' : '屏幕已熄灭')
})

// ---- 3. 申请通知权限后启动 ----
if (isNotificationEnabled()) {
  start()
} else {
  requestNotificationPermission((granted) => {
    console.log('通知权限申请结果:', granted)
    start()
  })
}

function start() {
  register()
  // 引导加入电池优化白名单
  if (!isIgnoringBatteryOptimizations()) {
    requestIgnoreBatteryOptimizations()
  }
}
// #endif

停止保活

// #ifdef APP
unregister()
// #endif

五、API 文档

5.1 配置项

以下方法建议在 register() 之前调用。

方法 参数 说明
setNotification title: string, content: string 设置常驻通知的标题与内容。运行中修改后需重新调用 register() 才刷新
setSmallIcon name: string 设置通知小图标的 drawable 资源名(不带扩展名),默认 ic_keeplive
setNotificationId id: number 设置通知 id,不同 id 会生成不同通知,默认 10001
setChannel id: string, name: string 设置通知渠道 id 与名称。渠道属性首次创建后不可修改,改样式必须换新 id
setWakeLockTimeout seconds: number 唤醒锁时长(秒),默认 600。<= 0 表示不使用唤醒锁。运行中修改在下次续期时生效
setTimerInterval seconds: number 后台定时任务周期(秒),默认 60。<= 0 表示关闭定时任务。运行中调用立即生效
setDebug on: boolean 开关插件调试日志(输出到 HBuilderX 控制台),默认关闭

5.2 生命周期

方法 返回值 说明
register() void 启动保活。可重复调用,会按最新配置重新启动
unregister() void 停止保活并移除常驻通知。停止为异步过程,调用后 isRunning() 可能短暂仍为 true
isRunning() boolean 保活是否正在运行
getAliveSeconds() number 本次已持续运行的秒数,未运行时返回 0
getTickCount() number 本次运行累计触发的定时次数

5.3 回调

这两个方法注册的是持续触发的回调,只需注册一次;重复注册会覆盖上一次。

方法 参数 说明
onTimerTick callback: (count: number) => void 每次后台定时任务触发时回调,count 为累计次数
onScreenStateChange callback: (screenOn: boolean) => void 屏幕点亮 / 熄灭时回调,true 为点亮

5.4 权限与系统设置

方法 返回值 / 参数 说明
isNotificationEnabled() boolean 通知是否可用。用户在系统里关闭通知后返回 false
requestNotificationPermission callback: (granted: boolean) => void 申请通知权限(Android 13+)。回调只触发一次;低版本或已授权时立即回调 true
isIgnoringBatteryOptimizations() boolean 是否已在电池优化白名单中
requestIgnoreBatteryOptimizations() void 申请加入电池优化白名单,会弹出系统确认框
openNotificationSettings() void 打开系统通知设置页
openAppSettings() void 打开应用的系统设置详情页

六、默认值一览

配置 默认值
通知标题 应用正在后台运行
通知内容 保活服务已启动
通知小图标 ic_keeplive
通知 id 10001
通知渠道 id lj_keeplive
通知渠道名称 后台保活
唤醒锁时长 600 秒
定时任务周期 60 秒
调试日志 关闭

七、通知图标

  • 插件内置图标:utssdk/app-android/res/drawable/ic_keeplive.xml
  • setSmallIcon() 传入的是 drawable 资源名,不带扩展名
  • 换成自己的图标:把同名图标文件放到你项目根目录的 nativeResources/android/res/drawable/(或 mipmap/)下即可覆盖,保持资源名一致,无需改代码
  • 图标解析顺序:drawable 同名资源 → mipmap 同名资源 → 应用自身图标

八、权限说明

插件会在打包时声明以下 Android 权限:

权限 用途
android.permission.FOREGROUND_SERVICE 前台服务基础权限
android.permission.FOREGROUND_SERVICE_SPECIAL_USE Android 14+ 前台服务类型 specialUse 对应权限
android.permission.POST_NOTIFICATIONS Android 13+ 展示常驻通知
android.permission.WAKE_LOCK 保持息屏后 CPU 运行
android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 引导用户将应用加入电池优化白名单

如何修改:

  • 移除电池白名单权限:删除插件内置 AndroidManifest.xml 中对应的 <uses-permission>,并同步删除项目 manifest.json 里 app-plus.distribute.android.permissions 的同名项。注意该权限属于敏感权限,Google Play 上架审核会重点审查,国内应用市场一般不受影响。
  • 改前台服务类型:若你的应用具备真实的后台音频播放或数据传输业务,可把 AndroidManifest.xml 中的 android:foregroundServiceType="specialUse" 改为 mediaPlayback / dataSync,并同步替换权限为 FOREGROUND_SERVICE_MEDIA_PLAYBACK / FOREGROUND_SERVICE_DATA_SYNC。注意 Android 15 对 dataSync 有「24 小时内累计 6 小时」的强制停止限制。
  • Google Play 上架:specialUse 类型需要在 Play Console 中填写相同用途的使用理由。

九、常见问题

Q1:调用 register() 后毫无反应,通知栏也没有通知?

请确认已使用自定义基座运行。标准基座不含插件的原生内容,制作基座后在安装前先卸载旧基座。

Q2:服务已启动,但通知栏看不到常驻通知?

用 isNotificationEnabled() 检查、requestNotificationPermission() 申请通知权限。也可检查用户是否单独关闭了该通知渠道。

Q3:息屏一段时间后定时任务不再触发?

用 getTickCount() 判断是否还在增长。若不再增长,依次检查:

  1. setWakeLockTimeout() 是否为 0 或负数
  2. 是否已加入电池优化白名单(isIgnoringBatteryOptimizations())
  3. 系统设置里是否允许「自启动」「后台运行」,是否把应用锁定在最近任务列表
  4. 是否被厂商的「省电策略」「应用智能省电」限制

Q4:改了通知标题,为什么通知里没变?

文案变更后需要重新调用一次 register()。若要改铃声、震动等渠道属性,必须通过 setChannel() 换一个新的 channelId。

Q5:unregister() 之后可以立刻 register() 吗?

可以。

Q6:能保证 App 永不被杀吗?

不能。保活只能提升存活率,无法对抗用户的主动结束、系统资源紧张与厂商 ROM 策略。


十、已知限制

  • 仅支持 Android,iOS / 鸿蒙 / H5 / 小程序均不支持。
  • 仅支持云端传统打包,不支持离线打包、安心打包。
  • 应用被系统回收后重新启动保活时,会回退到默认配置,请在启动时重新下发配置。
  • 定时任务的实际触发间隔受系统调度影响,建议周期不小于 30 秒。
  • 唤醒锁会带来额外耗电,请按业务需要设置合理的 setWakeLockTimeout() 值。

十一、隐私声明

  • 不采集、不存储、不上传任何用户数据
  • 不含任何广告 SDK
  • 不发起任何网络请求
  • 仅使用上文列出的 Android 系统权限,用途均已在权限表中说明

十二、更新日志

1.0.0

  • 首次发布。
  • 支持前台服务 + 常驻通知保活。
  • 支持唤醒锁与到期自动续期。
  • 支持息屏 / 亮屏监听与屏幕状态回调。
  • 支持后台定时任务。
  • 提供通知权限申请、电池优化白名单引导、系统设置页跳转。

隐私、权限声明

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

<!-- 前台服务基础权限 --> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <!-- Android 14(API 34) 起,前台服务必须声明类型对应的权限 --> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" /> <!-- Android 13(API 33) 起,展示通知需要运行时权限 --> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <!-- 唤醒锁,保证息屏后 CPU 不休眠 --> <uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- 引导用户把应用加入电池优化白名单 --> <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

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

插件不采集任何数据。 插件不发起任何网络请求,不存在任何服务器地址。 插件不依赖任何第三方 SDK。 插件仅在本地读取系统状态(屏幕亮灭、通知权限、电池优化状态、应用包名)用于实现保活功能, 不存储、不上传、不向第三方共享。

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

本插件不包含任何广告,无广告 SDK,无任何广告展示。

许可协议

MIT协议

暂无用户评论。