当前位置:首页 » 安卓系统 » android广播唤醒

android广播唤醒

发布时间: 2023-09-30 13:57:42

㈠ android系统后台唤醒怎么关闭

Android 系统支持应用程序及服务在待机前保存程序运行状态,如待机前关闭文件读写、usb 操作、暂停音乐播放;也支持唤醒后的程序状态恢复,如恢复打开文件进行读写操作,恢复 usb 操作、恢复音乐播放等。这些状态的保存和恢复功能可以保证系统在待机唤醒后能正常工作。
主要提供两种方式:
1、待机广播消息和唤醒广播消息。
2、Wakelock 锁机制。

分为两个部分说明一下:
1、android 系统待机处理机制
待机广播消息和唤醒广播消息
系统在 PowerManagerService 类中注册了 2 个广播分别用于待机前和唤醒后发送。
void initInThread(){
//唤醒后:
mScreenOnIntent=newIntent(Intent.ACTION_SCREEN_ON);//唤醒后发送
mScreenOnIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
//待机前:
mScreenOffIntent=newIntent(Intent.ACTION_SCREEN_OFF);//待机时发送
mScreenOffIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
}
这里顺带说明一下广播接收的优先级问题:
接收者按照在 Manifest.xml 文件中设置的接收顺序依次接收Intent,顺序执行的,接收的优先级可以在系统配置文件中设置:
声明在intent-filter元素的android:priority 属性中,数值越大优先级别越高,其取值范围为-1000到1000。当然也可以在调用IntentFilter对象的setPriority()方法进行设置
Wakelock 锁机制:
应用程序可以通过申请 wakelock 锁的机制来对系统是否待机作出投票,当有任何一个应用申请了 wakelock 锁,待机时没有释放掉,系统是不会进入待机的,直到所有应用的 wakelock 锁都释放掉了,才会进入待机。

㈡ Android 使用广播系统解决app开机自启动问题

关注 【网罗开发】微信公众号,回复【160】便可领取。
网罗天下方法,方便你我开发 ,更多Android技术干货等待领取,所有文档会持续更新,欢迎关注一起成长!

总结一下使用ACTION_BOOT_COMPLETED的广播,解决app开机自启动的问题
1.首先在你的工程上建一个广播接受的类,继承BroadcastReceiver:

2.然后要在AndroidManifest.xml中加入权限和配置相关信息:

3.在application标签中,配置以下相关信息:

补充说明:
1.查看系统中是否安装了类似360管家的软件,为了加快开机速度,默认是关闭掉开机广播的,只需要在设置中打开即可。
2.如果监听不到广播,可以尝试同时监听广播和sd卡。
3.同时监听广播和sd卡,在application标签中,配置以下相关信息:

㈢ Android后台进程保活方案

思想: 使用 Linux 中的 fork 机制创建 Native 进程,在 Native 进程中监控主进程的存活,当主进程挂掉后,在 Native 进程中立即对主进程进行拉活。

原理: 在 Android 中所有进程和系统组件的生命周期受 ActivityManagerService 的统一管理。Android5.0以下通过 Linux 的 fork 机制创建的进程为纯 Linux 进程,其生命周期不受 Android 的管理。

该方案主要适用于 Android5.0 以下版本手机。

该方案不受 forceclose 影响,被强制停止的应用依然可以被拉活,在 Android5.0 以下版本拉活效果非常好。
详情

对于 Android5.0 以上手机,系统虽然会将native进程内的所有进程都杀死,这里其实就是系统“依次”杀死进程时间与拉活逻辑执行时间赛跑的问题,如果可以跑的比系统逻辑快,依然可以有效拉起。在 某些 Android 5.0 以上机型有效。
详情

https://github.com/Marswin/MarsDaemon

作者5.0以下系统用一个java进程和一个fork出来的纯native进程双管道互锁监听对方的状态,无论哪个被杀后都拉起第三个进程,第三个进程来拉活常驻进程,实现拉活。
5.0以上同一进程组的进程会被同时杀死,所以5.0以上使用双java进程在native层互锁文件实现监听,但任务管理器会在短时间内杀死所有进程,只能用反射提前初始化pacel,在进程被杀的时候和系统抢那几十毫秒的时间发送一个拉活的广播。用4个文件来让两个进程实现互锁来做监听,但实际效果很一般,测试了几个5.0以上的国产机型都不行,效果是根本监听不到进程被杀,目测原因是当任务管理器查杀进程的时候将所有的进程都挂起了,随后全部杀掉,并在一段时间内禁止进程启动。

PersistedJobService.java

BootReceiver.java静态注册BroadcastReceiver

注册,开机,网络切换、拍照、拍视频时候,利用系统产生的广播也能唤醒app,不过Android N已经将这三种广播取消了

常用的拉活权限

BackgroundService.java
WakeLock

作为前台应用运行,提高应用存活几率

service被关掉后自动启动

START_STICKY
如果系统在onStartCommand返回后被销毁,系统将会重新创建服务并依次调用onCreate和onStartCommand(注意:根据测试Android2.3.3以下版本只会调用onCreate根本不会调用onStartCommand,Android4.0可以办到),这种相当于服务又重新启动恢复到之前的状态了)。

START_NOT_STICKY
如果系统在onStartCommand返回后被销毁,如果返回该值,则在执行完onStartCommand方法后如果Service被杀掉系统将不会重启该服务。

START_REDELIVER_INTENT
START_STICKY的兼容版本,不同的是其不保证服务被杀后一定能重启。

service注册,权限设置为高优先级

KeepAliveService.java
注册,在新的独立进程内启动,适用5.0以下的原生系统,5.0以上同样会被杀死

他的局限性在于:
第一,用户会在系统设置的账户列表里面看到一个不认识的账户;
第二,同步的事件间隔是有限制的,最短1分钟,见源码,如果小雨60秒,置为60秒。而且各种国产机怎么改的源码我们未可知,是不是都能用仍然未可知;
第三,很致命,某些手机比如note3需要手动设置账户,你如何骗你的用户给你手动设置账户完了之后不卸载你;
第四,也很致命,必须联网!google提供这个组件是让你同步账户信息,不联网你同步个鬼,我们要保活,可以不联网不做事,但是不能不联网就死

集成三方推送平台sdk,友盟极光等

㈣ Android保活——蓝牙唤醒(主动kill掉也可唤醒)

项目需要后台保活,但无论怎么保活,只要用户主动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系统睡眠状态如何唤醒线程和广播

不能!
(不能手动唤醒,因为肯定需要点亮屏幕(手动点亮屏幕),所以并不是真睡眠状态)。
只能提前设置,比如闹钟,具体到“广播”即收音机,那么只建议使用第三方程序,如“蜻蜓FM”,就像闹钟可以定时自动开启。

如果是自己造,相当于重新编个程序出来,需要掌握大量专业性的东西,得不偿失

㈥ Android本地广播的使用

为了解决广播的安全性问题,Android引入了本地广播机制,使用该机制发出的广播只能在应用程序的内部进行传递,并且广播接收器也只能接收来自本应用程序发出的广播。

本地广播是无法通过静态注册的方式来接收的。我们知道静态注册主要是为了在程序未启动的情况下能接收广播,而当我们发送本地广播的时候,程序肯定是已经启动的了,所以我们需要动态注册方式创建接收器。
在这里我们创建一个继承于BroadcastReceiver的类LocalReceiver。onReceive()处理你接收到的广播内容,在这里我用Toast来创建一个提示接收到消息的弹窗

在activity_main.xml文件创建一个用于发送广播的按钮

首先通过本地广播管理器LocalBroadcastManager的getInstance()方法获取一个实例,并分别创建过滤器IntentFilter和自定义接收器LocalReceiver的实例。给IntentFilter的实例添加一个action:localbroadcast(接收的广播的名称),然后调用LocalBroadcastManager的registerReceiver()方法进行注册,并将LocalReceiver的实例和IntentFilter的实例都传进去。这样本地监听器就创建完成了。
调用LocalBroadcastManager的sendBroadcast()发送本地广播。运行程序,点击Send Button按钮,我们可以看到弹窗显示“This is in LocalReceiver”,说明本地广播发送和接收成功了。

当然,我们最后一定不要忘了取消注册。我们可以通过调用unregisterReceiver()方法来实现。至此,Android的标准广播发送就完成了。

1.发送的广播只能在本程序内传递,不必担心数据泄露
2.其它程序广播无法发送到本程序的内部,不必担心安全漏洞隐患
3.本地广播比系统全局广播更加高效

㈦ Android怎样通过广播机制唤醒后台服务

[mw_shl_code=java,false] <receiver
android:name="com.test.DataChangeReceiver" >

<intent-filter>
<action
android:name="android.intent.action.DATE_CHANGED" />

</intent-filter>

</receiver>[/mw_shl_code]

这个是一个接收日期改变后的广播的例子;

对应的 java文件
就一个receive

[mw_shl_code=java,true]public class DataChangeReceiver extends
BaseReceiver {

@Override
public void onReceive(Context
context, Intent intent) {}
}[/mw_shl_code]

热点内容
hypixel手机国际版服务器ip 发布:2025-01-25 09:14:36 浏览:598
荒岛求生安卓怎么下载 发布:2025-01-25 09:09:31 浏览:209
java中io流 发布:2025-01-25 09:02:54 浏览:878
华为高斯数据库 发布:2025-01-25 08:55:38 浏览:31
php是动态语言 发布:2025-01-25 08:45:44 浏览:67
服务器关闭了电脑网络还能用 发布:2025-01-25 08:22:28 浏览:588
热血航线的登录密码在哪里可以看 发布:2025-01-25 08:22:27 浏览:770
5系怎么选择配置 发布:2025-01-25 08:22:18 浏览:843
pythonscipy 发布:2025-01-25 08:18:52 浏览:419
恕瑞玛服务器地址 发布:2025-01-25 08:18:51 浏览:802