主要内容:

(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

去处理

android+广播+讲解,Android广播机制相关推荐

  1. Android简单实现BroadCastReceiver广播机制

    Android中广播的作用是非常明显的,当我们收到一条信息,可能我们的应用需要处理一些数据,可能我们开机,我们的应用也需要处理一些数据,这里都用到了广播机制,这里简单的实现了一个自定义广播,看实例: ...

  2. android广播教程,Android学习笔记(广播机制)

    1.Android的广播机制介绍 收听收音机也是一种广播,在收音机中有很多个广播电台,每个广播电台播放的内容都不相同.接受广播时广播(发送方)并不在意我们(接收方)接收到广播时如何处理.好比我们收听交 ...

  3. Android四大组件:广播机制——BroadcastReceiver

    Android广播机制 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为 ...

  4. Android 第二十课 广播机制(大喇叭)----发送自定义广播(包括发送标准广播和发送有序广播)

    广播分为两种类型:标准广播和有序广播 我们来看一下具体这两者的具体区别: 1.发送标准广播 我们需要先定义一个广播接收器来准备接收此广播才行,否则也是白发. 新建一个MyBroadcastReceiv ...

  5. Android 学习笔记 BroadcastReceiver广播...

    PS:不断提升自己,是件好事... 学习内容: 1.BroadcastReceiver的使用.. 2.通过BroadcastReceiver去启动Service... 1.BroadcastRecei ...

  6. android java广播,[原]Android应用程序发送广播(sendBroadcast)的过程分析

    前面我们分析了Android应用程序注册广播接收器的过程,这个过程只完成了万里长征的第一步,接下来它还要等待ActivityManagerService将广播分发过来.ActivityManagerS ...

  7. android s静态广播,重走android(3)广播 · sk600’s Studio

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 广播作为android四大组件之一,应用非常广泛,主要通过intent这个"介质"来传递信息,可以完 ...

  8. 广播接收者android,电话拦截广播,电话接收者demo

    一.Android广播机制介绍 广播机制最大的特点就是发送方并不关心接收方是否接到数据,也不关心接收方是如何处理数据的. Android中广播的是操作系统中产生的各种各样的事件.例如,收到一条短信就会 ...

  9. Android 广播接收不到短信问题,Android中短信的广播接收问题

    首先,接收短信的机制是接收广播,由系统发出短信到来的广播,我们对短信广播进行注册,从而接收. import java.util.Date; import android.content.Broadca ...

最新文章

  1. 互联网晚报 | 3月28日 星期一 | 上海医保局辟谣:新冠患者要自负医疗费用不属实 ;十荟团关停全国所有业务...
  2. 求解数组中子数组连续元素的之和的最大值
  3. 2018江苏冬令营5 交换矩阵
  4. java中else语句有错_java 菜鸟 If else有错误
  5. 在使用 Go 两年之后,我又转回 PHP 了
  6. mysql管理密码修改及管理权限设定(zz)
  7. C语言如何控制控制台窗口大小
  8. 计算机二级Java上机环境安装与使用
  9. Android ViewStub动态加载View
  10. springboot+安卓app电子阅览室系统毕业设计源码016514
  11. Codeforces Round #467 (Div. 2) D. Sleepy Game
  12. 支付行业常见信息安全合规认证小记
  13. 如何写一个Vue自定义指令
  14. Java之Eclipse实现——在海绵宝宝的比基尼海滩里投喂鱼食
  15. 计算机考研调剂心酸,考研,这一路走来、辛酸苦辣~百感交集~(转)
  16. c语言信用卡号验证,Javascript验证Visa和MasterCard信用卡号的方法
  17. 解决No thread-bound request found: Are you referring to request attributes outside of an actual web.异常
  18. 小布助手,身入大千世界
  19. 阿里云服务器选择不同的地域有何区别,应该如何选择?
  20. 虚拟机里的linux磁盘空间扩容

热门文章

  1. 21 个令程序员泪流满面的瞬间
  2. 45 张令程序员泪流满面的趣图
  3. ios和android下数字没有垂直居中,手机端设置小号字体的上下居中问题
  4. 深度linux 官网,Deepin
  5. 教你怎样用安全网关消灭蠕虫病毒(转)
  6. iOS-微信朋友圈图片压缩算法
  7. 计算机应用基础是科技,《最新计算机应用基础》科学技术指南丛书.pdf
  8. 什么是意志力?如何提高意志力?
  9. AHCI,SATA,NVME
  10. 读《Ivor Horton's beginning Visual C++ 2010》有感