Android学习笔记入门 : 03 BroadcastReceiver

BroadcastReceiver

概述.

BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。

在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度,等等。

若发送数据频率高,或者传递大数据,绝对不能使用broadcast

Android中的广播机制设计的非常出色,很多事情原本需要开发者亲自操作的,现在只需等待广播告知自己就可以了,大大减少了开发的工作量和开发周期。而作为应用开发者,就需要数练掌握Android系统提供的一个开发利器,那就是BroadcastReceiver。


文档:

android.content.BroadcastReceiver

 http://developer.android.com/reference/android/content/BroadcastReceiver.html


新建一个BroadCastReceiver

建立一个继承 BroadCastReceiver 的类 MyBC

里面会有个onReceive方法

public class MyBC extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
System.out.println("onReceive()");
}
}


再去AndroidManifest.xml的Application目录下进行注册一个Receiver结点



或者写代码,代码是这样的

  <receiver android:name="MyBC"></receiver>

注意,这种方式的注册是常驻型的,也就是说当应用关闭后,如果有广播信息传来,MyReceiver也会被系统调用而自动运行。




给BroadCastReceiver发送消息

使用函数 sendBroadCast(Intent intent)

sendBroadCastBtn.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{

Intent i = new Intent(MainActivity.this, MyBC.class);
sendBroadcast(i);
}
});



启动应用 发现当 点击按钮时 MyBC的 onReceive()方法被调用了 

如果想传递数据 sendBroadcast之前 在 intent中加入参数就行了 ,在对应的onReceive()中取出



动态注册和注销广播接收器

当不希望接收器一直存在时  应该使用动态注册和注销 .可以随时注册和注销

首先注释掉静态注册时 在AndroidManifest中添加的Receiver结点.


动态注册广播接收器

registerReceiver(mybc, new IntentFilter(mybc.ACTION));

参数1是广播接收器对象   参数2是是一个IntentFilter,用来设置广播的地址. 

这里我在MyBC中设了个字符串常量当地址. 

虽然这个可以随意设置,但还是写规范点好:   广播接收器的包名.intent.action.类名

public class MyBC extends BroadcastReceiver
{
public static final String ACTION = "cn.zyh.usingbc.intent.action.mybc";

...


这种注册后发送广播可以用更便捷的方式,直接用Action构造intent,不需要类名 .

Intent i = new Intent(MyBC.ACTION);
i.putExtra("txt", "hello");
sendBroadcast(i);



动态注销广播接收器  

unregisterReceiver(mybc);



============================================================



Activity

package cn.zyh.usingbc;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity
{
	private Button sendBroadCastBtn, regBCRBtn, unregBCRBtn;
	private final MyBC mybc = new MyBC();

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		sendBroadCastBtn = (Button) findViewById(R.id.sendBtn);
		regBCRBtn = (Button) findViewById(R.id.registBtn);
		unregBCRBtn = (Button) findViewById(R.id.unregistBtn);

		sendBroadCastBtn.setOnClickListener(new View.OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				// Intent i = new Intent(MainActivity.this, MyBC.class);
				Intent i = new Intent(MyBC.ACTION);
				i.putExtra("txt", "hello");
				sendBroadcast(i);
			}
		});

		regBCRBtn.setOnClickListener(new View.OnClickListener()
		{

			@Override
			public void onClick(View v)
			{
				registerReceiver(mybc, new IntentFilter(mybc.ACTION));
				// IntentFilter 给接收器指定一个地址 ,向这个地址发送的广播是可以真听到的
			}
		});

		unregBCRBtn.setOnClickListener(new View.OnClickListener()
		{

			@Override
			public void onClick(View v)
			{

				unregisterReceiver(mybc);
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu)
	{
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}



MyBC

package cn.zyh.usingbc;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class MyBC extends BroadcastReceiver
{
	public static final String ACTION = "cn.zyh.usingbc.intent.action.mybc";

	@Override
	public void onReceive(Context context, Intent intent)
	{
		System.out.println("onReceive()");
		String result = intent.getStringExtra("txt");
		System.out.println(result);

	}

}


















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值