注册广播的两种方式
动态注册
在java代码中指定IntentFilter,然后添加不同的Action即可,想监听什么广播就写什么Action,另外动态注册的广播一定要调用unregisterReceiver让广播取消注册。
首先自定义一个BroadcastReceiver,在onReceive()方法中完成广播要处理的事务:
然后在Activity中动态注册广播,并在onDestroy()方法中销毁:
动态注册的广播会受Activity的生命周期的影响,当Activity销毁的时候,广播就失效了。
静态注册
静态注册的广播,会在程序运行的整个过程中一直存在,不会被注销掉,当程序被杀掉后不会再接收到广播了。
首先自定义一个静态广播,并在Manifest.xml文件中注册:
在Activity中定义一个按钮发送广播:
全局广播和本地广播
全局广播
上面的两种注册方式介绍的广播都是全局广播,即发出的广播可以被其他任何的应用程序接收到,并且也可以接收来自于其他任何应用程序的广播。这样容易引起安全性问题,比如我们发送的一些携带关键性数据的广播有可能被其他应用程序捕获,或者其他的程序不停地向我们的广播接收器里发送各种垃圾广播。
本地广播
本地广播机制发出的广播只能够在应用程序的内部进行传递,并且广播接收器也只能接收来自本应用程序发出的广播。本地广播主要是使用了LocalBroadcastManager来对广播进行管理,并提供了发送广播和注册广播接收器的方法。本地广播是无法通过静态注册的方式接收的,因为静态注册主要是为了让程序在后台运行的情况下也能收到广播,而发送本地广播时,我们的程序肯定是已经在运行了,因此完全不需要使用静态注册的功能。
优点:
1.可以明确的知道正在发送的广播不会离开我们的程序,因此不需要担心机密数据泄露的问题;
2.其他的程序无法将广播发送到我们程序的内部,因此不需要担心会有安全泄露的隐患;
3.发送本地广播比起发送系统全局广播会更加高效。
首先自定义一个本地广播:
在Activity中动态注册广播,并在onDestroy()方法中销毁
极光推送
使用jcenter自动集成,不需要再项目中添加jar和so,jcenter会自动完成依赖,在AndroidManifest.xml中不需要添加任何JPush SDK相关的配置,jcenter会自动导入。
首先确认android studio 的主gradle中配置了jcenter支持:
在module的gradle中添加依赖和AndroidManifest的替换变量:
必须添加的依赖:
配置完成后,一定要记得初始化init()接口啊!!!
和静态注册同样的道理,在Manifest.xml文档中注册:
收到极光推送的广播后,可以做的事情:
大功告成:
当APP在运行或者还在后台运行时,收到极光推送的消息后会有消息弹出,当程序的进程被杀死后,就不会再收到推送的消息了。