Android保活——蓝牙唤醒(主动kill掉也可唤醒)
发布网友
发布时间:2022-11-27 10:01
我来回答
共1个回答
热心网友
时间:2023-10-16 06:26
项目需要后台保活,但无论怎么保活,只要用户主动kill掉,app依然是活不了。
发现了蓝牙唤醒这个方式,用户主动kill掉也可行。
Android 8.0开始提供了 startscan的方法,
public void startScan(ScanCallback callback)
public void startScan(List<ScanFilter> filters,ScanSettings settings,ScanCallback callback)
public int startScan(List<ScanFilter> filters,ScanSettings settings,PendingIntent callbackIntent)
第一个没有过滤条件,锁屏就停止扫描
第二个可以加过滤条件,锁屏不影响扫描
第三个的扫描结果由PendingIntent发送,即使app没有在运行,系统也可以扫描后唤醒app,这就是我们要的方法了。
PendingIntent是对Intent的封装,是满足某些条件或触发某些事件后才执行指定的行为,主要用于闹钟、通知、桌面部件。Android的四大组件之间通信用Intent,跨进程通信用PendingIntent。
Android 8.0 引进了Context.startForegroundService(),在系统创建服务后,应用需要在ANR发生前调用startForeground(int ,android.app.Notification),如果未及时调用该方法,系统将报ANR错误 。系统给前台服务的ANR时间是20秒。
用startScan蓝牙唤醒的原理是:app向系统订阅了扫描结果(预先加了过滤条件),当蓝牙连接断开的时候,设备就会发广播,这时系统就可以扫描到对应的广播,唤醒对应的service,这时想做什么操作就根据你的项目需要了。至于系统会为你扫描多久,这个还没测试。
(1)setScanMode有四个参数可以选 :
SCAN_MODE_BALANCED:在平衡电源模式下执行蓝牙LE扫描。返回扫描结果的速度能够很好地权衡扫描频率和功耗。
SCAN_MODE_LOW_LATENCY:扫描使用最高占空比。建议只在应用程序在前台运行时使用此模式。
SCAN_MODE_LOW_POWER:在低功耗模式下执行蓝牙LE扫描。这是默认的扫描模式,因为它消耗的能量最少。如果扫描应用程序不在前台,则强制执行此模式。
SCAN_MODE_OPPORTUNISTIC:一种特殊的蓝牙LE扫描模式。使用这种扫描模式的应用程序将被动地侦听其他扫描结果,而不启动BLE扫描本身
(2)settingBuilder.setMatchMode有两个参数可以选:
MATCH_MODE_AGGRESSIVE: 信号弱也会报告
MATCH_MODE_STICKY: 信号比较强和扫描到的次数比较多才会报告
(3)settingBuilder.setCallbackType也有其他参数可选,但适用的就一个
(4) ScanFilter 的过滤方法有几个,如下图,打勾的是测试了可行的,但只有第一个DeviceAddress有唯一性
Android 如何进行进程保活
那么你打开任意一个阿里系的 app 后,有可能就顺便把其他阿里系的 app 给唤醒了。 这个完全有可能的。此外,开机,网络切换、拍照、拍视频时候,利用系统产生的广播 也能唤醒 app,不过 Android N 已经将这三种广播取消了。 如果应用想保活,要是 QQ,微信愿意救你也行,有多少手机上没有 QQ,微信呢?或 者像友盟,...
kudu tablet unhealthy 问题是什么原因造成?怎么...
网络故障:Tablet Server与其他组件之间的网络故障可能会导致Tablet出现unhealthy状态。可以通过检查网络连接是否正常来解决此问题。磁盘故障:Tablet Server上的磁盘故障可能会导致Tablet出现unhealthy状态。可以通过检查Tablet Server上的磁盘...
如何让一个应用程序一直在后台运行
1 开机,网络切换,拍照,拍视频等利用系统广播唤醒APP 此场景Google已经意识到,在Android N 取消了 拍照,视频,网络切换的广播 2 接入第三方的SDK也会唤醒相应的APP进程 3 假如你手机里装了支付宝,淘宝,UC等阿里系的APP,那么你打开任何一个,都有可能唤醒其他的阿里系的APP 3 白色保活:就是调...
进程保活
答:进程保活就是进程永远存在内存中,是杀不死的,就算杀死了也会有办法重新启动起来,其实这些并不是流氓手段,很多情况下,如果你想给你的用户提供服务,就必须有一个进程常驻着,便于在特定的时候做一些特定的事情,比如广播接受者,他就不支持静态注册,也就是说如果我们想接受屏幕开关启动的广播,...
Service的保活机制
【可行性】多个app应用唤醒需要相互之间有关联才能实现,推送sdk应用间唤醒当用户强制停止后无法唤醒。4.利用Android系统提供的帐号和同步机制实现 在应用中建立一个帐号,然后开启自动同步并设置同步间隔时间,利用同步唤醒app。账号建立后在手机设置-账号中能看到应用的账号,用户可能会删除账号或者停止同步,...