android广播

Android 系统四大组件

我的未来我决定 提交于 2019-12-18 00:22:26
Android 系统四大组件分别是活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供器(Content Provider)。 活动是所有 Android 应用程序的门面,凡是在应用中看得到的东西,都是放在活动中的。 服务是一直运行在后台,即使退出了应用,服务仍然可以继续在后台运行。 广播接收器允许应用接收来自各处的广播,同样也可以向外发出广播信息。 内容提供器为应用程序之间共享数据提供了通道,比如应用获取电话本联系人。 来源: https://www.cnblogs.com/lialong1st/p/9015499.html

Android组件体系之BroadcastReceiver小结

会有一股神秘感。 提交于 2019-12-10 21:16:20
1、常见分类 BroadCastReceiver,按注册方式可以分为静态广播接收器和动态广播接收器。 静态广播接收器:不受程序是否启动的约束,当应用程序关闭之后,还是可以接收到广播(一般广播接收器的生命周期是和当前活动的生命周期保持同步)。 动态广播接收器:可以自由的控制注册和取消,有很大的灵活性。但是只能在程序启动之后才能收到广播。 对于广播(Broadcast),则可以分为普通广播和有序广播。 其中普通广播不在意顺序,各进程的广播接收器基本上可以同时收到这个广播。而有序广播,系统会根据接收者声明的优先级按顺序逐个接收处理,先收到有序广播的接收器,可以对该有序广播进行修改或者截断。 静态注册的广播接收器,在接收广播时,系统自动按有序广播的方式来串行处理(原因是进程的创建不能并发),此类接收器收到广播的先后顺序,和接收器所在package名称有关,或者说,和PMS扫描顺序有关。 动态注册的广播接收器,如果接收普通广播,接收器收到广播的顺序则和注册顺序有关。在所有普通广播里面,动态注册的广播接收器,相对于静态注册的广播接收器,会优先收到普通广播。 同优先级的动态有序广播,注册顺序影响广播的接收顺序;同优先级的静态有序广播,扫描顺序影响其接收顺序。 除了前面提到的这些,还有一种相对不太常用的:LocalBroadcastManager方式注册的应用内广播接收器

EventBus事件总线分发库

谁说胖子不能爱 提交于 2019-12-09 17:13:21
本文围绕以下六个部分展开: 一、事件总线管理 二、EventBus 三、EventBus与BroadcastReceiver的区别 案例一 案例二:一处点击发送数据,另一处或多处注册点可以及时获取更新传输过来的数据 案例三:Activity和Service之间互相发布与接收事件 一、事件总线管理 将事件放入队列里,用于管理和分发。 (1)保证应用的各个部分之间高效的通信及数据、事件分发。 (2)模块间解耦:通过事件的分发,可以让各个模块间关联程序变小。 当在开发一些庞大的的项目时,模块比较多,这个时候为了避免耦合度和保证 APP 的效率,会用到 EventBus 等类似的事件总线处理模型。这样可以简化一些数据传输操作,保证APP的简洁,做到高内聚、低耦合。 二、EventBus 1. 概念 EventBus是一个发布/订阅的事件总线。它可以让两个组件相互通信,但是它们之间并不相互知晓。 EventBus模式,也被称为 Message Bus模式,或者 发布者/订阅者(publisher/subscriber)模式。 事件响应有更多的线程选择,EventBus 可以向不同的线程中发布事件。 EventBus 支持 Sticky Event。 2. 有3个主要的元素: (1)Event:事件。 Event可以是任意类型的对象。 (2)Subscriber:事件订阅者,接收特定的事件。

详解Android广播机制

别等时光非礼了梦想. 提交于 2019-12-08 23:11:31
应用场景   (1)同一应用具有多个进程的不同组件之间的消息通信      a)不同应用间的组件之间的消息通信      b)与Android系统在特定情况下的通信,如:系统开机,网络变化等   (2)同一应用内同一组件的消息通信:显然扩展变量的作用域、接口回调、Handler-Message等方式都能更简单的实现。   (3)同一应用内的不同组件之间的消息通信(单个进程):对于简单的的情况,依靠接口的回调方式就可解决;而较为复杂的情况,更推荐直接使用EventBus等。 (2)、(3)场景理论上可以使用,但是实际开发没有人这么做。 实现原理 设计模式与模型: Android中的广播使用了观察者模式, 模型为 基于消息的发布/订阅事件模型。 从设计模式上讲,广播的发送者和接收者极大程度的解耦,使得系统方便集成,容易扩展 模型成员: 消息发布者(广播发布者) 消息订阅者(广播接收者) 消息中心(AMS,Activity Manager Service,一个Android系统中极其重要!的成分,以后我们会详细讲解) 此处我们扩展一下,观察者模式和发布订阅模式的关系 发布订阅模式属于广义上的观察者模式 ,前者时最常用的一种观察者模式的实现,且从解耦和重用角度上看更优于典型的观察者模式, 在观察者模式中,观察者需要直接订阅目标事件,在目标发出内容改变的事件后,直接接收事件并作出响应。

监听APK安装广播

a 夏天 提交于 2019-12-07 08:51:24
在开发中,我们经常会需要监听应用的安装、卸载或替换,但是经常又会遗忘某些关键点。 1. 配置权限 <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/> 2. 注册广播 private void initReceiver() { IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED); intentFilter.addAction(Intent.ACTION_PACKAGE_REPLACED); intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED); intentFilter.addDataScheme("package"); registerReceiver(receiver, intentFilter); } private BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent

Android 监听安装和卸载

只谈情不闲聊 提交于 2019-12-07 08:50:22
Android 应用程序的安装和卸载事件,是由系统进行监听并全局广播的,支持1.5(android 3)以上 因此,如果想要监听获取应用的安装和卸载事件,只需要自定义一个BroadcastReceiver,来对系统广播进行监听和处理 BroadcastReceiver 是系统全局广播监听类, 其主要方法是onReceive(),自定义的广播类继承于它并实现自己的onReceive()处理逻辑 BroadcastReceiver 使用前,需要进行注册监听(xml和代码两种方式),不使用时需要注销监听,其生命周期一般为整个应用的生命周期 1, 自定义广播 自定义广播MyInstalledReceiver继承自BroadcastReceiver,实现其onReceive()方式,具体代码如下: public class MyInstalledReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("android.intent.action.PACKAGE_ADDED")) { // install String packageName = intent.getDataString

Android 8.0 App 安装卸载流程

牧云@^-^@ 提交于 2019-12-07 08:49:10
此文章为了验证Android 8.0 安装,卸载和更新一个应用时广播的接受状态, 主要是更新一个应用时都会接收到那些广播, 先接收到那些广播, 下面就以一个简单的例子来验证这些: public class PackageInstallReceiver extends BroadcastReceiver { @Override public void onReceive (Context context, Intent intent) { //接收安装广播 if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)) { String packageName = intent.getData().getSchemeSpecificPart(); Log.e( "cjl" , "install app packageName = " +packageName); } //接收卸载广播 if (intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED)) { String packageName = intent.getData().getSchemeSpecificPart(); Log.e( "cjl" , "uninstall app packageName = "

BroadcastReceiver详解

◇◆丶佛笑我妖孽 提交于 2019-12-07 01:14:41
二、注册相关 1、静态注册实例程序 大家可能会问,什么叫静态注册实例程序,先不要管上面的标题,慢慢往下看,后面在讲动态注册时会再提到。 先构造一个接收器: [java] view plain copy public class MyReceiver extends BroadcastReceiver { private static final String TAG = "MyReceiver"; @Override public void onReceive (Context context, Intent intent) { // TODO Auto-generated method stub String msg = intent.getStringExtra("msg"); Log.i(TAG, "MyReceiver:"+msg); } } 直 接派生自BroadcastReceiver,在OnReceive()函数中进行处理即可,我们前面说了,广播的传递是靠Intent 的,OnReceive的第二个参数,就是广播传过来的Intent,因为后面我们在发送广播时,会利用PutStringExtra放进去一个标识为 msg的字符串,所以这里我们可以利用GetStringExtra把这个字符串取出来。然后用Log标记下这个类接收到了这个消息,以便我们跟踪。 大家可能会想

Android SERVICE后台服务进程的自启动和保持

有些话、适合烂在心里 提交于 2019-12-06 18:22:59
Android SERVICE后台服务进程的自启动和保持 2012-12-27 10:30 佚名 eoeAndroid 我要评论( 0 ) 字号: T | T Service组件在android开发中经常遇到,其经常作为后台服务,需要始终保持运行,负责处理一些必要(见不得人)的任务。 AD: 51CTO学院:IT精品课程在线看! Service组件在android开发中经常遇到,其经常作为后台服务,需要始终保持运行,负责处理一些必要(见不得人)的任务。而一些安全软件,如360等,会有结束进程的功能,如果不做Service的保持,就会被其杀掉。 如何保持Service的运行状态是现在要说明的,核心就是利用ANDROID的系统广播,这一不会被其他软件影响的常驻程序触发自己的程序检查Service的运行状态,如果被杀掉,就再起来。 我利用的系统广播是Intent.ACTION_TIME_TICK,这个广播每分钟发送一次,我们可以每分钟检查一次Service的运行状态,如果已经被结束了,就重新启动Service。 下边就是具体的代码和注意事项了: 1、 Intent.ACTION_TIME_TICK的使用 我们知道广播的注册有静态注册和动态注册,但此系统广播只能通过动态注册的方式使用。即你不能通过在manifest.xml里注册的方式接收到这个广播

Android之高仿飞鸽传输热点创建与搜索模块

。_饼干妹妹 提交于 2019-12-06 16:28:16
这两天,无意中看到飞鸽传书的wifi热点创建与搜索模块,于是乎很蛋疼的还原了一下他的这一小模块代码,感觉效果差不多,跟大家分享一下: 源码下载地址: http://download.csdn.net/download/weidi1989/5293352 我们先来看看效果图: 1.山寨机主界面 2.进应用就会自动搜索wifi,这个动画效果截屏变形了。将就一下吧 3.搜索结果显示 4.连接上我另外一台山寨机创建的热点 5.正在创建热点 6.热点创建成功,关于那个黑黑的gif动画,我试了三种方法:①.网上导了那个很泛滥的包,不行,②.用Movie实现的动画,还是不行,在有的机器上会花屏,③.就是下面这个效果了,自定义的一个view,由于图片是透明的,所以黑色底没有解决。 下面是几个关键类的代码: 1.我们先来看看这个广播:WTBroadcast,通过这个广播,可以及时更新我们的界面显示信息。重点是“android.net.wifi.WIFI_STATE_CHANGED” 与“android.net.wifi.STATE_CHANGE”两个状态的区别 /** * wifi状态监听广播 * * @author way * */ public class WTBroadcast extends BroadcastReceiver { public static ArrayList