《Android提高篇》6.Android BroadcastReceiver

前面分别讨论了ActivityService,这篇就介绍Android BroadCastReceiver,BroadCast是应用程序间通信的手段。BroadCastReceiver也是跟Intent紧密相连的,动态/静态注册了BroadCastReceiver之后,使用sendBroadcast把Intent发送之后,系统会自动把符合条件的BroadCastReceiver启动,跟嵌入式系统的中断类似。

本文主要演示了如何动态/静态注册BroadCastReceiver,向系统索取电量信息,以及枚举信息的字段。本文运行截图如下:

testBroadCastReceiver

动态注册BroadcastReceiver

上图是发送Intent至内部动态注册的BroadcastReceiver,接收到之后显示消息名称。动态注册BroadcastReceiver用到registerReceiver()。

静态注册BroadcastReceiver

上图是发送Intent至内部静态注册的BroadcastReceiver,接收到之后显示消息名称。静态注册比动态注册麻烦点,先新建一个类继承BroadcastReceiver,然后到AndroidManifest.xml 添加:

第一个name是类名,第二个是action的名称。

Log

上图是枚举Intent消息的字段,这个功能比较适合懒人,把收到的Intent消息的字段全部分解了,再看看哪个需要的,懒得记住。实现这部分的代码如下:

main.xml

testBroadcastReceiver.java

package com.testBroadcastReceiver;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class testBroadcastReceiver extends Activity {
	Button btnInternal1, btnInternal2, btnSystem;
	static final String INTENAL_ACTION_1 = "com.testBroadcastReceiver.Internal_1";
	static final String INTENAL_ACTION_2 = "com.testBroadcastReceiver.Internal_2";
	static final String INTENAL_ACTION_3 = "com.testBroadcastReceiver.Internal_3";

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		btnInternal1 = (Button) this.findViewById(R.id.Button01);
		btnInternal1.setOnClickListener(new ClickEvent());
		btnInternal2 = (Button) this.findViewById(R.id.Button02);
		btnInternal2.setOnClickListener(new ClickEvent());
		btnSystem = (Button) this.findViewById(R.id.Button03);
		btnSystem.setOnClickListener(new ClickEvent());
		// 动态注册广播消息
		registerReceiver(bcrIntenal1, new IntentFilter(INTENAL_ACTION_1));
	}

	class ClickEvent implements View.OnClickListener {

		@Override
		public void onClick(View v) {
			if (v == btnInternal1)// 给动态注册的BroadcastReceiver发送数据
			{
				Intent intent = new Intent(INTENAL_ACTION_1);
				sendBroadcast(intent);
			} else if (v == btnInternal2)// 给静态注册的BroadcastReceiver发送数据
			{
				Intent intent = new Intent(INTENAL_ACTION_2);
				sendBroadcast(intent);
			} else if (v == btnSystem)// 动态注册 接收2组信息的BroadcastReceiver
			{
				IntentFilter filter = new IntentFilter();//
				filter.addAction(Intent.ACTION_BATTERY_CHANGED);// 系统电量检测信息
				filter.addAction(INTENAL_ACTION_3);// 第三组自定义消息
				registerReceiver(batInfoReceiver, filter);

				Intent intent = new Intent(INTENAL_ACTION_3);
				intent.putExtra("Name", "hellogv");
				intent.putExtra("Blog", "http://blog.csdn.net/hellogv");
				sendBroadcast(intent);// 传递过去
			}
		}

	}

	/*
	 * 接收动态注册广播的BroadcastReceiver
	 */
	private BroadcastReceiver bcrIntenal1 = new BroadcastReceiver() {

		public void onReceive(Context context, Intent intent) {
			String action = intent.getAction();
			Toast.makeText(context, "动态:" + action, 1000).show();
		}
	};

	private BroadcastReceiver batInfoReceiver = new BroadcastReceiver() {

		public void onReceive(Context context, Intent intent) {
			String action = intent.getAction();
			// 如果捕捉到的action是ACTION_BATTERY_CHANGED
			if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
				// 当未知Intent包含的内容,则需要通过以下方法来列举
				Bundle b = intent.getExtras();
				Object[] lstName = b.keySet().toArray();

				for (int i = 0; i < lstname.length;="" i++)="" {="" string="" keyname="lstName[i].toString();" log.e(keyname,="" string.valueof(b.get(keyname)));="" }="" }="" 如果捕捉到的action是intenal_action_3="" if="" (intenal_action_3.equals(action))="" {="" 当未知intent包含的内容,则需要通过以下方法来列举="" bundle="" b="intent.getExtras();" object[]="" lstname="b.keySet().toArray();" for="" (int="" i="0;" i="">< lstname.length;="" i++)="" {="" string="" keyname="lstName[i].toString();" log.e(keyname,="" b.getstring(keyname));="" }="" }="" }="" };="" }="">

clsReceiver2.java

暂无评论
  • 1:请一针见血的评论。
  • 2:评论需要审核通过后才能显示。
  • 3:评论字数限制在1000字以内。
  • 当前字数:0
热门文章
推荐文章
随机文章
关于本站 - 广告服务 - 版权声明 - 联系我们 - 友情链接 - 网站地图 - 帮助中心