# android-keeplive ### 本插件支持uniapp/uniappx 双端 长期维护,有任何问题请在插件群联系作者 ### 功能介绍和注意事项 ### 源码版本安卓端不包含aar文件源码,其它端包含所有源码 #### 本插件为后台无声音乐保活,为推送蓝牙后台传数据等保驾护,增加程序存活率,防止程序进入后台后或者系统休眠后程序停止执行的问题(用本插件定时器1和定时器2可保证任何状态下准确执行)无定位需求直接集成即可,若需要定位则合并集成作者定位插件 1.android/iOS端需要自定义基座 2.ios 端若觉得效果不佳,可以解压ios 插件目录下的uni_modules\android-keeplive\utssdk\app-ios\info.zip 将info.plist 文件和uts 文件在同一个级别 文件(上架可能会困难一点) 3.推荐android端合井使用作者一像素保活效果更佳[链接](https://ext.dcloud.net.cn/plugin?id=20324) #### Android端 其它增加存活机会方法 1.最近任务给程序加锁,2.在系统设置启动项开启应用程序后台运行 #### 插件测试使用方法 1. 选择试用,绑定要试用的项目appid, 2. 选择后下载到对应的本地项目, 3. 按照文档 -》把插件引入项目(即 import { KeepLive } from '@/uni_modules/android-keeplive' 需要先引入), 4. 发布-》云打包-》选择制作基座-》打包等基座制作完成 5. 运行 -》 运行到手机或模拟器-》运行到Androidapp基座-》选择使用自定义基座运行-》选择手机-》运行 6. 若之前手机安装过基座需要先卸载之前的基座 ### 安卓默认通知id为 6234542 ### uniappx ~~~ // #ifdef APP import { KeepLive } from '@/uni_modules/android-keeplive' // 放在页面导入的地方 // #endif // // #ifdef APP var keep=new KeepLive(); keep.setTitle("app"); keep.setContent("app is runing"); // keep.setLargeIcon("icon"); keep.setSmallIcon("icon"); //图标名字 图标放在 插件下面的 uni_modules\android-keeplive\utssdk\app-android\res 文件夹下 keep.onAddBackgroundCallback(function(res:boolean){ console.log("后台运行 "+res) }) keep.onAddScrrenListenerCallback(function(res:boolean){ console.log("屏幕开启状态 "+res) }) keep.onAddNotificationClickListener(function(d:string){ // d 为点击通知栏信息 的json字符 console.log(d); }) keep.setWakeLock(1,"keeptag");// 设置唤醒类型 keep.setAutoStartEnable(true) if(!keep.checkAppNotification()){ keep.onOpenNotificationSetting(function(res:boolean){ keep.register(); var ignoring= keep.isIgnoringBatteryOptimizations(); if(!ignoring){ keep.requestIgnoreBatteryOptimizations(); } }) }else{ keep.register(); var ignoring= keep.isIgnoringBatteryOptimizations(); if(!ignoring){ keep.requestIgnoreBatteryOptimizations(); } } // 稳定定时器 需要的用户使用(默认定时器1 ) keep.onStartCSystemTimer(60,function(){ console.log("onStartCSystemTimer "); keep.acquire(1000);// 唤醒一秒钟 }); // 需要插件增加程序后台运行能力的可以加下面代码 想程序始终保持活性(即稳定推送 scocket等)(体验好) 还是建议用户打开系统设置 启动项 后台运行 //keep.wifilock();//部分手机可能会断 // 定时器时间改成10秒 去掉上方的 //keep.onStartCSystemTimer(10,function(){ // console.log("onStartCSystemTimer "); // keep.acquire(1000);// 唤醒一秒钟 //}); // #endif ~~~ ### uniapp ~~~ // #ifdef APP import { KeepLive } from '@/uni_modules/android-keeplive' // 放在页面导入的地方 // #endif // // #ifdef APP var keep=new KeepLive(); keep.setTitle("app"); keep.setContent("app is runing"); // keep.setLargeIcon("icon"); keep.setSmallIcon("icon"); //图标名字 图标放在 插件下面的 res/drawable 文件夹下 keep.onAddBackgroundCallback(function(res){ console.log("后台运行 "+res) }) keep.onAddScrrenListenerCallback(function(res){ console.log("屏幕开启状态 "+res) }) keep.onAddNotificationClickListener(function(d){ // d 为点击通知栏信息 的json字符 console.log(d); }) keep.setWakeLock(1,"keeptag");// 设置唤醒类型 keep.setAutoStartEnable(true) if(!keep.checkAppNotification()){ keep.onOpenNotificationSetting(function(res){ keep.register(); var ignoring= keep.isIgnoringBatteryOptimizations(); if(!ignoring){ keep.requestIgnoreBatteryOptimizations(); } }) }else{ keep.register(); var ignoring= keep.isIgnoringBatteryOptimizations(); if(!ignoring){ keep.requestIgnoreBatteryOptimizations(); } } keep.onStartCSystemTimer(60,function(){ console.log("onStartCSystemTimer "); keep.acquire(1000);// 唤醒一秒钟 }); // 需要插件增加程序后台运行能力的可以加下面代码 想程序始终保持活性(即稳定推送 scocket等)(体验好) 还是建议用户打开系统设置 启动项 后台运行 //keep.wifilock();//部分手机可能会断 // 定时器时间改成3秒 去掉上方的 //keep.onStartCSystemTimer(3,function(){ // console.log("onStartCSystemTimer "); // keep.acquire(1000);// 唤醒一秒钟 //}); // #endif ~~~ ### 需要gps定位用户 可合并作者定位插件(推荐使用作者定时器1 ,系统休眠后可执行) #### [安卓 ios 鸿蒙 原生gps定位](https://ext.dcloud.net.cn/plugin?id=21745) [安卓ios 高德定位](https://ext.dcloud.net.cn/plugin?id=20916) [安卓腾讯定位](https://ext.dcloud.net.cn/plugin?id=20875)(后续支持ios) [安卓ios 百度定位](https://ext.dcloud.net.cn/plugin?id=20562) #### uniappx ~~~ // #ifdef APP import { isProviderEnabled, openLocSetting, onStartLocs,LocData,stop,LocationData} from "@/uni_modules/xtf-gpslocation" // #endif // #ifdef APP // 停用后台播放音乐 keep.setBackgroundMusicEnabled(false); // 后台定位则需要使用插件的定时器 息屏也能执行,自定定时器易休眠停止执行 // 先启动定位 var on=isProviderEnabled();// 是否开启gps if(on){ keep.onStartCSystemTimer(60,function(){ onStartLocs({ backgroud:true, } as LocData,function(data:LocationData){ console.log(data) }) }); } // #endif ~~~ #### uniapp ~~~ import { isProviderEnabled, openLocSetting, onStartLocs,LocData,stop} from "@/uni_modules/xtf-gpslocation" // 停用后台播放音乐 keep.setBackgroundMusicEnabled(false); // 后台定位则需要使用插件的定时器 息屏也能执行,自定定时器易休眠停止执行 // 先启动定位 var on=isProviderEnabled();// 是否开启gps if(on){ keep.onStartCSystemTimer(60,function(){ onStartLocs({ backgroud:true, } ,function(res){ console.log(res) }) }); } ~~~ ### 注册开启运行 #### register ~~~ keep.register(); ~~~ ### 重启 #### restart ~~~ keep.restart(); ~~~ ### 取消运行 #### unregister ~~~ keep.unregister(); ~~~ ### 是否运行 #### isRunning return boolean ~~~ var run=keep.isRunning(); ~~~ ### 判断通知权限是否开启(安卓有效,ios 无功能) #### checkAppNotification ~~~ var on=keep.checkAppNotification(); ~~~ #### 打开应用通知设置(安卓有效,ios 无功能) #### goNotificationSetting ~~~ keep.goNotificationSetting(); ~~~ #### 打开应用通知设置并返回状态(安卓有效,ios 无功能) uniappx ~~~ keep.onOpenNotificationSetting(function(on:boolean){ }) ~~~ uniapp ~~~ keep.onOpenNotificationSetting(function(on){ }) ~~~ ### 通过包名打开应用程序(安卓有效,ios 无功能) #### doStartApplicationWithPackageName 参数1 应用包名 string ~~~ keep.doStartApplicationWithPackageName("com.test"); ~~~ ### 开启应用省电后台运行 (安卓有效,ios 无功能) #### requestIgnoreBatteryOptimizations ~~~ keep.requestIgnoreBatteryOptimizations(); ~~~ ### 判断应用是否开启省电后台运行 (安卓有效,ios 无功能) #### isIgnoringBatteryOptimizations return boolean ~~~ var ignoring= keep.isIgnoringBatteryOptimizations(); ~~~ ### 设置后台无声音乐是否开启 (安卓有效,ios 无功能) #### setBackgroundMusicEnabled 参数1 boolean ~~~ keep.setBackgroundMusicEnabled(true); ~~~ ### 设置安卓通知点击回调(安卓有效,ios 无功能) uniappx ~~~ keep.onAddNotificationClickListener(function(d:string){ // d 为点击通知栏信息 的json字符 console.log(d); }) ~~~ uniapp ~~~ keep.onAddNotificationClickListener(function(d){ // d 为点击通知栏信息 的json字符 console.log(d); }) ~~~ ### 是否隐藏通知栏 (弃用,后续删除) #### hideNotification(安卓有效,ios 无功能) 参数1 boolean ~~~ keep.hideNotification(false); ~~~ ### 静音通知 #### setNotifaicationSoundEnable 参数1 boolean ~~~ keep.setNotifaicationSoundEnable(true); ~~~ ### 设置通知id ~~~ keep.setNotifationId(333);// id 为随意 重复为更新通知 不同为发布新的 ~~~ ### 设置通知栏 ChannelId 默认keeplive(安卓有效,ios 无功能) #### setChannelId 参数1 string ~~~ keep.setChannelId("keeplive"); ~~~ ### 更新通知栏 #### updateNotification ~~~ keep.setTitle("Test"); keep.setContent("test runing"); keep.updateNotification(); ~~~ ### 设置通知栏标题 #### setTitle 参数1 string ~~~ keep.setTitle("title"); ~~~ ### 设置通知栏内容 #### setContent 参数1 string ~~~ keep.setContent("msg"); ~~~ ### 设置通知重要性(安卓有效,ios 无功能) #### setChannelImportance 参数1 number 1-3 低到高 ~~~ keep.setChannelImportance(3); ~~~ ### 设置通知栏channel 锁屏可见性(安卓有效,ios 无功能) ~~~ keep.setLockscreenVisibility(1); 锁屏可见性,可选范围VISIBILITY_PRIVATE:0、VISIBILITY_PUBLIC:1、VISIBILITY_SECRET:-1、VISIBILITY_NO_OVERRIDE:-1000 ~~~ ### 设置通知栏 channel 震动(安卓有效,ios 无功能) ~~~ keep.enableVibration(true);// true 开启 false 关闭 ~~~ ### 设置通知分组(安卓有效,ios 无功能) ~~~ keep.setNotifationMsgGroup("test");// 设置后更新通知 通知在一个分组 通知 setNotifationId需要不同 ~~~ ### 设置通知栏附属信息(安卓有效,ios 无功能) ~~~ keep.setNotifationExterData("data"); ~~~ ### 如何发送组通知 ~~~ this.id=this.id+1; keep.setTitle("Test"+this.id); keep.setContent("test runing"); keep.setNotifationExterData("xxxaa22233"+this.id); keep.setNotifationMsgGroup("test"); keep.updateNotification(); ~~~ ### 设置通知栏小图标(安卓有效,ios 无功能) #### setSmallIcon 参数1 string 插件的res drawable 目录下 名称 ~~~ keep.setSmallIcon("icon"); ~~~ ### 设置通知栏大图标(安卓有效,ios 无功能) #### setLargeIcon 参数1 string 插件的res drawable 目录下 名称 ~~~ keep.setLargeIcon("icon"); ~~~ ### 设置通知栏是否点击取消(安卓有效,ios 无功能) ~~~ keep.setAutoCancel(false);// false 表示不可取消 true 表示可取消 ~~~ ### 取消组通知 (安卓有效,ios 无功能) ~~~ keep.cancelGroupNotifaon("test") ~~~ ### 取消指定id 的通知(安卓有效,ios 无功能) ~~~ keep.cancelNotifation(0) ~~~ ### 设置唤醒cpu类型(安卓有效,ios 无功能) #### setWakeLock 参数1 number 1:保持CPU 运转,屏幕和键盘灯有可能是关闭的。 参数2 string tag ~~~ keep.setWakeLock(1,"tag"); ~~~ ### 唤醒cpu 需先设置唤醒cpu 类型(安卓有效,ios 无功能) #### acquire 参数1 number 时间 ~~~ keep.acquire(-1); ~~~ ### 释放cpu 需先设置唤醒cpu 类型(安卓有效,ios 无功能) #### releaseAcquire ~~~ keep.releaseAcquire(); ~~~ ### 后台背景音乐测试 启动保活之前调用 (安卓有效,ios 无功能) ~~~ keep.setMusicVol(0) // 0~1 范围 keep.setMusicId("music") // 将音乐放进 插件目录 /res/raw/music.mp3 ~~~ ### 主动退出应用后台运行,相当于单击home (安卓有效,ios 无功能) ~~~ keep.toBackground(); ~~~ ### android 息屏准确执行定时器 (二者选择一个就可) #### 定时器1 android/iOS/ web 三端均可用无需判断平台 ~~~ //开启定时器 60时间为秒 keep.onStartCSystemTimer(60,function(){ console.log("onStartCSystemTimer ") }); //keep.cancelCSystemTimer();// 取消定时器 //keep.clearAllCTimer(); // 取消全部定时器 ~~~ #### 定时器2 ~~~ // android 原生定时任何状态一秒误差, 开始时间 1000为1秒0是马上执行, 开启周期 65*1000, 循环时间 大于60s 精准有效 低于60秒偏差误差 keep.startAleraTask(0,65*1000,function(){ console.log("onAleraTaskListener ") }); //取消循环定时 keep.cancleAleraTask() ~~~ ### 获取插件存活时间 ~~~ var liveTime=keep.getLiveTime();// 毫秒时间 ~~~ ### 隐藏最近任务(安卓有效,ios 无功能) 参数1 boolean true 为隐藏,false为显示 ~~~ keep.hideRecentTask(true);// 隐藏 ~~~ ### 打开安卓系统应用设置 方便用户设置自启动(安卓有效,ios 无功能) ~~~ keep.goAndroidSystemAppSetting(); ~~~ ### 崩溃后重启 (原生Rom 有效 ) ~~~ keep.setCrashRestartUIEnabled(true); ~~~ ### 其它功能 ~~~ android channel 为android通知栏通配置 对使用插件app的新用户 本插件的channelId 默认为keeplive channelName 默认为keeplive 默认为有声通知。首次调用keep.register()/keep.updateNotification() 这个channel 就会自定创建好,并且不可修改 本插件可自定义channel 在调用keep.register()/keep.updateNotification()之前调用下面代码 keep.setNotifaicationSoundEnable(false); keep.setChannelId("保活"); keep.setChannelName("保活") //通知名称 keep.register();//keep.updateNotification()/* 同样为调用即为创建,之后不可修改,但是可以添加新的, 调用其中一个即可,之后就一直按照新的配置发送通知*/ ~~~ ### 安卓部分手机wifi状态下,休眠的时候 wifi 会断开连接,可以调用下面的代码 使休眠的时候保持wifi 连接 ~~~ keep.wifilock();// 休眠时锁定wifi ~~~ ~~~ keep.wifiunlock();// 休眠时取消锁定wifi ~~~