广播机制----第一行代码
来源:互联网 发布:淘宝怎么开店卖东西 编辑:程序博客网 时间:2024/04/30 08:32
1、广播的类型
(1)标准广播
这是一种异步执行的广播,在广播发送出去之后,所有的广播接收器几乎都能在同一时间接收到这条广播消息,因此标准广播是没有先后顺序的,这样的广播方式效率比较高,但同时也意味着他们是不能截断的。
(2)有序广播
这是一种同步执行的广播,在广播发送出去之后,在同一时刻只能只有一个优先级高的广播接收器接收到,当这个广播接收器的逻辑执行完之后广播才能够继续传递。所以此时的广播接收器接收广播消息是有先后顺序的,优先级高的广播接收器优先接收到广播消息,并且前面的广播接收器可以截断正在传递的广播。
2、接收系统广播-----动态注册监听网络变化
Step
(1)在MainActivity中新建一个内部类NetWorkChangeReceiver让其继承自BroadcastReceiver,并实现方法onReceiver
//声明内部类让其继承自BroadcastReceiver public class NetWorkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "network changed", Toast.LENGTH_SHORT).show(); } }
(2)声明NetWorkChangeReceiver对象并实例化
private NetWorkChangeReceiver broadcaseReceiver = new NetWorkChangeReceiver();
(3)实例化IntentFilter对象并添加action
//实例化IntentFilter对象并添加action IntentFilter intentfilter = new IntentFilter(); intentfilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
(4)注册广播接收器
//注册广播 registerReceiver(broadcaseReceiver,intentfilter);
(5)取消广播接收器的注册
//取消注册 unregisterReceiver(broadcaseReceiver);
MainActivity.java
public class MainActivity extends BaseActivity { private NetWorkChangeReceiver broadcaseReceiver = new NetWorkChangeReceiver(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView.setAdapter(fruitAdapter); //实例化IntentFilter对象并添加action IntentFilter intentfilter = new IntentFilter(); intentfilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); //注册广播 registerReceiver(broadcaseReceiver,intentfilter); } @Override protected void onDestroy() { super.onDestroy(); ActivityCollector.removeActivity(this); //取消注册 unregisterReceiver(broadcaseReceiver); } //声明内部类让其继承自BroadcastReceiver public class NetWorkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "network changed", Toast.LENGTH_SHORT).show(); } } }
3、发送标准广播
Step
(1)新建一个类MyBroadcastReceiver继承自BroadcastReceiver,实现方法onReceive
public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "received in MyBroadcastReceiver", Toast.LENGTH_SHORT).show(); } }
(2)首先创建一个Intent对象,并把广播的值传递进去,然后只用sendbroadcast(intent)将广播发送出去,所以监听com.example.broadcast.MYBROADCAST这条广播消息的接收器就能接收到该消息
//发送广播 Intent intent = new Intent("com.example.broadcast.MYBROADCAST"); sendBroadcast(intent);
(3)注册广播接收器,有两种方式,一种动态注册广播接收器,另一种是在AndroidMainifest.xml中静态注册
动态注册接收器
private MyBroadcastReceiver myBroadcaseReceiver = new MyBroadcastReceiver(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //实例化IntentFilter对象并添加action IntentFilter intentfilter = new IntentFilter(); intentfilter.addAction("com.example.broadcast.MYBROADCAST"); //注册广播 registerReceiver(myBroadcaseReceiver,intentfilter); } public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "received in MyBroadcastReceiver", Toast.LENGTH_SHORT).show(); } } @Override protected void onDestroy() { super.onDestroy(); //取消注册 unregisterReceiver(myBroadcaseReceiver); }
静态注册接收器
AndroidMainifest.xml
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <strong><receiver android:name=".MyBroadcastReceiver"> <intent-filter> <action android:name="com.example.broadcast.MYBROADCAST"></action> </intent-filter> </receiver></strong> </application>
4、发送有序广播
有序广播和标准广播的接收广播和接收广播的方式是比较类似的,只是将sendBroadcast()方法改成sendOrderedBroadcast()
(1)有序广播是可以对广播的消息进行截断的,截断的方法是在MyBroadcastReceiver中的onReceive()方法中调用方法abortBroadcast(),就表示将广播消息进行截断,后面的广播接收器就无法接收到该广播消息了。
(2)有序广播中对接收器进行设置优先级,有两种方式:动态添加和AndroidMainifest.xml中静态添加
动态添加:intentFilter.setPriority(100);
静态添加:
<receiver android:name=".MyBroadcastReceiver">
<intent-filter android:priority="100">
<action android:name="com.example.broadcast.MYBROADCAST"></action>
</intent-filter>
</receiver>
- 广播机制----第一行代码
- Android Broadcast广播机制 《第一行代码》
- 【第一行代码】Android的广播机制
- 第一行代码笔记 广播机制 broadcast
- 第一行代码第5章——广播机制
- 第一行代码-第5章 广播机制
- [Android][第一行代码][第 5 章 广播机制]
- 《第一行代码--Android》读书笔记之广播机制
- 第一行代码笔记,第五章-----详解广播机制
- 第一行代码笔记2:广播
- 《第一行代码》读书笔记(五)----广播
- 第一行代码-5.2 接收系统广播
- 第一行代码-5.3 发送自定义广播
- 第一行代码-5.4 使用本地广播
- 第一行代码 第五章 广播
- 广播(Broadcast)---《第一行代码Android》笔记
- 广播机制(Broadcast Receiver)——第一行代码阅读笔记
- 《第一行代码》 随手笔记——第五章 广播机制
- Oracle 日期相关查询SQL
- JAVA IO分析大汇总
- hdu1385 Minimum Transport Cost(经典字典序输出路径)
- Codeforces 680B Bear and Finding Criminals【模拟】
- EventBus3.0的使用
- 广播机制----第一行代码
- js中typeof和instanceof的区别+必须熟记于心的JavaScript数据类型 — 第3.4 章
- 88. Merge Sorted Array
- java中的动态代理-JDK和cglib
- 1078. Hashing
- PhpStorm 部署web到apache 教程
- 为什么“程序猿”常有而“程序媛”不常有?
- EL表达式
- Win7 安装Python3.5