android+广播+讲解,Android广播机制

主要内容:

(1)广播机制介绍

(2)BroadcastReceiver实现

(3)BroadcastReceiver操作

(4)BroadcastReceiver生命周期

(5)注册BroadcastReceiver的方法

(6)Android的一些内置的BroadcastReceiver

具体讲解:

(一)广播机制介绍

广播机制,个人理解就是:广播方不管收听方做什么操作,只管广播,我们要做的就是收听到广播之后进行哪些操作。

(二)BroadcastReceiver实现

看代码:

packagecom.wjl;

importandroid.app.Activity;

importandroid.content.Intent;

importandroid.os.Bundle;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.widget.Button;

publicclassTestActivity extendsActivity {

privateButton sendButton;

/**Calledwhentheactivityisfirstcreated.*/

@Override

publicvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

sendButton= (Button)findViewById(R.id.sendButton);

sendButton.setOnClickListener(newBroadcastListener());

}

classBroadcastListener implementsOnClickListener{

publicvoidonClick(View v) {

Intent intent = newIntent();

intent.setAction(Intent.ACTION_EDIT);

TestActivity.this.sendBroadcast(intent);

}

}

}

(三)BoadcastReceiver操作

package com.wjl;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

public class TestReceiver extends BroadcastReceiver {

public TestReceiver(){

System.out.println("receiver");

}

@Override

public void onReceive(Context context, Intent intent) {

System.out.println("onReceiver");

}

}

需要注意的是:

需要在androidManifest.xml注册一下:

android:name=".TestReceiver">

(四)BroadcastReceiver生命周期

当点击按钮之后intent会到AndroidManifest.xml文件中找是不是有匹配的action,如果有就会调用TestReceiver ,然后获得TestReceiver 对象,再执行onReceive方法,这时候TestReceiver 对象就没有用了,当我们再次点击按钮的时候就会重新获得对象,这就是BroadcastReceiver的生命周期;

(五)注册BroadcastReceiver的方法

注册BroadcastReceiver的方法有两种,上面介绍了一种是在AndroidManifest.xml文件中注册的,还有一种是在类中注册的,方法如下:

package com.wjl;

import android.app.Activity;

import android.content.IntentFilter;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class BroadcastReceiverActivity extends Activity {

private Button registerButton = null;

private Button unregisterButton = null;

private MSMReceiver msmReceiver = null;

private static final String SMS_ACTION = "android.provider.Telephony.SMS_RECEIVED";

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

registerButton = (Button)findViewById(R.id.registerButton);

registerButton.setOnClickListener(new RegisterButtonListener());

unregisterButton = (Button)findViewById(R.id.unregisterButton);

unregisterButton.setOnClickListener(new UnRegisterButtonListener());

}

class RegisterButtonListener implements OnClickListener{

public void onClick(View v) {

//生成一个BroadcastReceive对象

msmReceiver = new MSMReceiver();

//生成一个IntentFilter对象

IntentFilter intentFilter = new IntentFilter();

//设置IntentFilter对象的action

intentFilter.addAction(SMS_ACTION);

//将BroadcastReceive对象注册到系统当中

BroadcastReceiverActivity.this.registerReceiver(msmReceiver, intentFilter);

}

}

class UnRegisterButtonListener implements OnClickListener{

public void onClick(View v) {

//解除BroadcastReceive在系统当中的注册

BroadcastReceiverActivity.this.unregisterReceiver(msmReceiver);

}

}

}

红色部分

(六)Android的一些内置的BroadcastReceiver

private static final String SMS_ACTION = "android.provider.Telephony.SMS_RECEIVED";

值得注意的是,有个权限还得设置一下:

MSMReceiver :

package com.wjl;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;

import android.telephony.SmsMessage;

public class MSMReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

System.out.println("Receive message");

//接受content对象中的数据

Bundle bundle = intent.getExtras();

//在bundle对象当中有一个属性名字为pdus,这个属性的值是一个object数组

Object [] myOBJpdus = (Object[])bundle.get("pdus");

//创建SmsMessage类型的数组

SmsMessage [] message = new SmsMessage[myOBJpdus.length];

System.out.println(message.length);

for(int i=0;i

//使用Object数组当中的对象创建SmsMessage对象

message[i] = SmsMessage.createFromPdu((byte[])myOBJpdus[i]);

//调用SmsMessage对象的getMessageBody()方法得到消息内容

System.out.println(message[i].getMessageBody());

}

}

}

在Android中如果要发送一个广播必须使用sendBroadCast向系统发送对其感兴趣的广播接收器中。

使用广播必须要有一个

intent

对象必设置其

action

动作对象

使用广播必须在配置文件中显式的指明该广播对象

每次接收广播都会重新生成一个接收广播的对象

BroadCast

中尽量不要处理太多逻辑问题,建议复杂的逻辑交给

Activity

或者

Service

去处理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值