android_BroadcastReceiver
2014-11-11 14:22
429 查看
BroadcastReceiver,Android四大组件之一,本质上就是一种全局的监听器,用于监听系统全局的广播消息。
程序启动BroadcastReceiver需要两步:
1.创建需要启动的BroadcastReceiver的Intent;
2.调用Context的sendBroadcast()或sendOrderedBroadcast()方法来启动指定的BroadcastReceiver。
BroadcastReceiver本质上是监听器,所以实现它只要重写onReceive(Context context,Intent intent)方法即可。
接着要指定该BroadcastReceiver能匹配的Intent,有如下两种方式:
1、代码进行指定:
2、在manifest文件中进行配置:
<receiver android:name="com.example.android_broadcasttest.MyReceiver">
<intent-filter>
<action android:name="com.example.android_broadcasttest.BROADCAST"/>
</intent-filter>
</receiver>
注:不要在BroadcastReceiver的onReceive()方法中执行耗时操作,否则会造成ANR。如果确实需要根据Broadcast来完成一项耗时操作,可以考虑通过Intent启动一个Service来完成需要的操作。
简单实例(最基本的用法):界面放置一个按钮用来发送广播,接收到广播之后Toast显示。
public class MainActivity extends ActionBarActivity {
private Button sendBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sendBtn = (Button) findViewById(R.id.send_btn);
sendBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//创建Intent对象
Intent intent = new Intent();
//设置Intent的Action属性
intent.setAction("com.example.android_broadcasttest.BROADCAST");
intent.putExtra("msg", "这是第一个简单的有序广播小案例~");
//发送广播
sendBroadcast(intent);
}
});
}
}
广播分为两种,普通广播和有序广播。
普通广播可以被所有接收者接收到,消息传递的效率比较高。缺点是接收者不能将处理结果传递给下一个接收者,并且无法终止Broadcast Intent的传播。
有序广播的接收者按预先声明的优先级依次接收Broadcast。优先级的声明有两种方式,1,在<intent-filter>元素的android:priority属性中设置;2,代码中调用intentFilter对象的setPriority()方法进行设置(数越大,优先级越高)。有序广播可以终止Broadcast Intent的传播,一旦终止,后面的接收者将无法接收到广播。另外,有序广播接收者可以将数据传递给下一个接收者。
有序广播的发送:
程序启动BroadcastReceiver需要两步:
1.创建需要启动的BroadcastReceiver的Intent;
2.调用Context的sendBroadcast()或sendOrderedBroadcast()方法来启动指定的BroadcastReceiver。
BroadcastReceiver本质上是监听器,所以实现它只要重写onReceive(Context context,Intent intent)方法即可。
接着要指定该BroadcastReceiver能匹配的Intent,有如下两种方式:
1、代码进行指定:
IntentFilter filter = new IntentFilter("com.example.android_broadcasttest.BROADCAST"); MyReceiver receiver = new MyReceiver(); registerReceiver(receiver,filter);
2、在manifest文件中进行配置:
<receiver android:name="com.example.android_broadcasttest.MyReceiver">
<intent-filter>
<action android:name="com.example.android_broadcasttest.BROADCAST"/>
</intent-filter>
</receiver>
注:不要在BroadcastReceiver的onReceive()方法中执行耗时操作,否则会造成ANR。如果确实需要根据Broadcast来完成一项耗时操作,可以考虑通过Intent启动一个Service来完成需要的操作。
简单实例(最基本的用法):界面放置一个按钮用来发送广播,接收到广播之后Toast显示。
public class MainActivity extends ActionBarActivity {
private Button sendBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sendBtn = (Button) findViewById(R.id.send_btn);
sendBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//创建Intent对象
Intent intent = new Intent();
//设置Intent的Action属性
intent.setAction("com.example.android_broadcasttest.BROADCAST");
intent.putExtra("msg", "这是第一个简单的有序广播小案例~");
//发送广播
sendBroadcast(intent);
}
});
}
}
public class MyReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, intent.getAction() + "------" + intent.getStringExtra("msg"), Toast.LENGTH_LONG).show(); } }
<receiver android:name="com.example.android_broadcasttest.MyReceiver"> <intent-filter > <action android:name="com.example.android_broadcasttest.BROADCAST"/> </intent-filter> </receiver>
广播分为两种,普通广播和有序广播。
普通广播可以被所有接收者接收到,消息传递的效率比较高。缺点是接收者不能将处理结果传递给下一个接收者,并且无法终止Broadcast Intent的传播。
有序广播的接收者按预先声明的优先级依次接收Broadcast。优先级的声明有两种方式,1,在<intent-filter>元素的android:priority属性中设置;2,代码中调用intentFilter对象的setPriority()方法进行设置(数越大,优先级越高)。有序广播可以终止Broadcast Intent的传播,一旦终止,后面的接收者将无法接收到广播。另外,有序广播接收者可以将数据传递给下一个接收者。
有序广播的发送:
sendOrderedBroadcast(intent,null);有序广播接收者存放数据:
//创建一个Bundle对象,并存入数据 Bundle bundle = new Bundle(); bundle.putString("pre", "接收者的数据!"); //将bundle放入结果中 setResultExtras(bundle);有序广播接收者终止广播:
abortBroadcast();有序广播接收者解析上一个接收者所存入的数据:
Bundle bundle = getResultExtras(true); //解析前一个接收者所存入的key为“pre”的消息 String result = bundle.getString("pre");
相关文章推荐
- 体验Android
- Android源码各个击破之-系统属性
- Study on Android【一】--概述
- 机器人Android在呼唤!
- Google Android IDE-eclipse plugin 预览
- 为什么是java,google的android策略
- Android Developer Challenge
- Google Calling: Inside Android, the gPhone SDK
- Android程序开发初级教程(三)
- Android程序开发初级教程(二)
- 什么是google的Android操作系统?
- Google手机操作系统Android应用开发入门
- Android程序开发初级教程(一)
- Android 入门开发指南之一 -- Android简介
- Android 原代码下载路径
- 体验Android:个人所得税计算器 含源码
- Android判断字符串中是否含字母、中文或数字
- 体验Android
- Google 1000万美元重奖Android开发者
- Android安装以及Eclipse插件(Google Android) ,在Android 中google搜索 博客园界面