android_BroadcastReceiver

BroadcastReceiver,Android四大组件之一,本质上就是一种全局的监听器,用于监听系统全局的广播消息。

程序启动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");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值