Android入门--BroadcastReceiver的使用

package com.example.testbroadcasereceiverregiste;

import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
/**
 * @author cen: 广播的注册和注销
 * 大前提!!!调用系统广播时,记得注册权限!!!
 * 1.首先创建一个类(例如Receiver)继承BroadcaseReceiver,用作接收到广播后触发的事件,然后调用onReceive方法
 * 2.然后是注册广播,分为静态注册和动态注册,其中静态注册是又叫:常驻型广播,当你的应用程序关闭了
 * 如果有广播信息来,你写的广播接收器同样的能接受到,静态注册是在AndroidManifest.xml文件中注册。
 * 动态注册分为注册registerReceiver和注销unregisterReceiver方法
 * 3.动态注册步骤:创建Receiver类的对象,创建IntentFilter类的对象并传入action动作,最后调用registerReceiver方法
 * 4.动态注销步骤:直接调用unregisterReceiver方法,传入Receiver类的对象
 * 5.自定义发送广播,创建Intent对象,传入action动作,调用sendsendBroadcast()传入intent
 */
public class MainActivity extends Activity {
	private final String TAG = "messageaa";
	private Button button;// 绑定广播
	private Button button2;// 取消广播
	private Button button3;// 发送自定义广播
	private Button button4;// 绑定自定义广播
	private Button button5;// 注销自定义广播
	private Receiver mReceiver;// Receiver类的对象
	private Receiver selfReceiver;// Receiver类的对象
	private static final String SMS_ACTION = "android.provider.Telephony.SMS_RECEIVED";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button = (Button) findViewById(R.id.button1);
		button.setOnClickListener(new OnClickListener() {// 绑定广播
			@Override
			public void onClick(View v) {
				Log.i(TAG, "--onClick-->>");
				Toast.makeText(MainActivity.this, "来信息了", Toast.LENGTH_SHORT)
						.show();
				mReceiver = new Receiver();// 实例化对象
				IntentFilter filter = new IntentFilter();// 创建新的过滤器对象
				filter.addAction(SMS_ACTION);// 添加过滤动作
				registerReceiver(mReceiver, filter);// 注册广播
			}
		});
		button2 = (Button) findViewById(R.id.button2);
		button2.setOnClickListener(new OnClickListener() {// 取消广播
			@Override
			public void onClick(View v) {
				unregisterReceiver(mReceiver);
				Toast.makeText(MainActivity.this, "注销了广播", Toast.LENGTH_SHORT)
						.show();
			}
		});
		button3 = (Button) findViewById(R.id.button3);
		button3.setOnClickListener(new OnClickListener() {// 发送自定义广播
			@Override
			public void onClick(View v) {
				Intent intent = new Intent("hehehe");
				sendBroadcast(intent);
			}
		});
		button4 = (Button) findViewById(R.id.button4);
		button4.setOnClickListener(new OnClickListener() {// 绑定自定义广播
			@Override
			public void onClick(View v) {
				selfReceiver = new Receiver();
				IntentFilter filter = new IntentFilter("hehehe");
				registerReceiver(selfReceiver, filter);
			}
		});
		button5 = (Button) findViewById(R.id.button5);
		button5.setOnClickListener(new OnClickListener() {// 注销自定义广播
			@Override
			public void onClick(View v) {
				unregisterReceiver(selfReceiver);
			}
		});
	}

	@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;
	}

}

下面是Receiver.java

package com.example.testbroadcasereceiverregiste;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;

public class Receiver extends BroadcastReceiver {
	private final String TAG = "message";

	public Receiver() {// 构造方法
	}

	@Override
	public void onReceive(Context context, Intent intent) {//其中intent就是广播的内容
		Log.i(TAG, "--onReceive-->>"+intent.getAction());
		Toast.makeText(context, "呵呵呵呵呵" + intent.getAction(),
				Toast.LENGTH_LONG).show();
		//下面是获取短信内容即广播内容的一些方法
		
		Bundle bundle=intent.getExtras();//接收Intent对象中的数据
		//在Bundle对象中有一个属性名为pdus,这个属性的值是一个Object数组
		Object[] myOBJpdus=(Object[])bundle.get("pdus");
		//创建SmsMessage类型的数组
		SmsMessage[] messages=new SmsMessage[myOBJpdus.length];
		Log.i(TAG, "这是消息"+messages.length);
		for (int i = 0; i < myOBJpdus.length; i++) {
			//使用Object数组当中的对象创建SmsMessage对象
			messages[i]=SmsMessage.createFromPdu((byte[])myOBJpdus[i]);
			//调用SmsMessage对象的getDisplayMessageBody()方法得到纤细内容
			Log.i(TAG, "消息是:"+messages[i].getDisplayMessageBody());
			Log.i(TAG, "测试:"+messages[i].getDisplayOriginatingAddress());
		}
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值