Android_BroadcastReceiver(一)
来源:互联网 发布:mac彻底卸载office 编辑:程序博客网 时间:2024/06/06 06:31
Android_BroadcastReceiver
作为一个Android小白,这是我的第一篇CSDN博客,这篇博客的主要内容介绍的是Android中的四大组件之一:广播
(BroadcastReceive),这些只是我的理解,如有差错,留言或者androidchw@163.com联系,谢谢。
Android中的广播主要分为两种形式:
标准广播(Normal Broadcasts)
一种异步执行的广播,所有的广播接收器几乎都在同一时刻接收到这条广播消息。它们之间没有任何顺序可言。这种广播的优点是效率比较高,但是这种广播无法拦截。并且在程序启动之后才能接收广播。
有序广播(Ordered Broadcastss)
一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播能接收到这条广播,当这个广播接收器中的逻辑执行完毕后,广播才会继续传播。此时的广播接收器是有先后顺序的,优先级高的广播接收器就可以先收到广播,并且前面的广播可以拦截广播。
上面说的可能太书本话了,下面就让我举个例子帮助大家更好的理解标准广播和有序广播。
标准广播
相信在帝都工作的程序猿都遇见过这种情况,公交车来了以后,人们都争先恐后的去公交车门那里挤公交。这就相当于系统发出一条广播,手机中的App争先恐后的抢这个广播。就像人们争先恐后的挤公交车一样,完全没有顺序可言。
有序广播
相信大家上学的时候,都遇见过大扫除这个事情吧。老师先把大扫除的消息给卫生委员分布下去,卫生委员又把大扫除的消息分布给各个组长,组长又把大扫除的消息分布个各个组员。有序广播就是这样传播的。它是有先后顺序的,级别越高的获取广播也就越早,并且还能够拦截不让后面级别低的获取到广播。
手机开机完成后会发出一条广播,电池的电量发生变化会发出一条广播,时间或者时区发生改变也会发出一条广播。一个广播的完成需要两个步骤:发送广播和接收广播。现在,我们就从最基础的接收系统广播开始学习吧。
如果你想了解更多有关Android系统的中的广播,可以查看 Android系统广播大全
现在我们就从最简单的接收系统广播开始学习吧,学习之前我们还是先了解一下广播的注册方式,Android中广播的注册方式有两种:(1)动态注册广播:在代码中注册。(2)静态注册广播:在AndroidManifest.xml中注册。
动态注册广播
public class MainActivity extends Activity { private IntentFilter intentFilter; private NetworkChangeReceiver networkChangeReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 动态注册广播 intentFilter = new IntentFilter(); //广播接收器想要监听什么样的广播,就在这里添加响应的action就行了。 intentFilter.addAction("android.net.con.CONNECTIVITY_CHANGE"); networkChangeReceiver = new NetworkChangeReceiver(); registerReceiver(networkChangeReceiver, intentFilter); } class NetworkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netWorkInfo = connectivityManager.getActiveNetworkInfo(); if (netWorkInfo != null && netWorkInfo.isAvailable()) { Toast.makeText(MainActivity.this, "network is available", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "network is not_available", Toast.LENGTH_SHORT).show(); } } } // 这一步至关重要 @Override protected void onDestroy() { super.onDestroy(); //取消注册的广播 unregisterReceiver(networkChangeReceiver); }}
接收系统网络变化的广播还需要权限,所以我们在AndroidManifest.xml中添加一个权限。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
静态注册广播
以下的代码主要是实现了开机启动的功能。
public class BootCompleteReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "Boot Complete", Toast.LENGTH_LONG).show(); }}
在AndroidManifest.xml中的静态注册广播的代码:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/><receiver android:name=".BootCompleteReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver>
- Android_BroadcastReceiver(一)
- android_BroadcastReceiver
- Android_BroadcastReceiver详解
- Android_BroadcastReceiver(二)
- Android_BroadcastReceiver(三)
- android_BroadcastReceiver 广播机制
- Android_BroadcastReceiver广播接收者详解及应用
- Android_BroadcastReceiver广播接收者详解及应用
- 一
- 《一》
- 一
- 一
- 一...
- 一
- 一
- (一)
- 一
- 一。
- Web系统大规模并发——电商秒杀与抢购
- 从0开始学习 GitHub 系列之「Git 速成」
- 编码纠正 glob logging replace re.sub 2016.05.30回顾
- 机器学习,数据挖掘在研究生阶段大概要学些什么?
- STL--queue
- Android_BroadcastReceiver(一)
- Light OJ - 1008 - Fibsieve`s Fantabulous Birthday
- __declspec(dllimport)的作用
- 菜鸟目录(一些常用知识点)
- 科研常用的软件
- Chrome DevTools – 25个技巧和窍门
- 实现任务的自动调度——Quartz
- 吸引子传播算法
- @ResponseBody与ResponseEntity