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
去处理
android+广播+讲解,Android广播机制相关推荐
- Android简单实现BroadCastReceiver广播机制
Android中广播的作用是非常明显的,当我们收到一条信息,可能我们的应用需要处理一些数据,可能我们开机,我们的应用也需要处理一些数据,这里都用到了广播机制,这里简单的实现了一个自定义广播,看实例: ...
- android广播教程,Android学习笔记(广播机制)
1.Android的广播机制介绍 收听收音机也是一种广播,在收音机中有很多个广播电台,每个广播电台播放的内容都不相同.接受广播时广播(发送方)并不在意我们(接收方)接收到广播时如何处理.好比我们收听交 ...
- Android四大组件:广播机制——BroadcastReceiver
Android广播机制 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为 ...
- Android 第二十课 广播机制(大喇叭)----发送自定义广播(包括发送标准广播和发送有序广播)
广播分为两种类型:标准广播和有序广播 我们来看一下具体这两者的具体区别: 1.发送标准广播 我们需要先定义一个广播接收器来准备接收此广播才行,否则也是白发. 新建一个MyBroadcastReceiv ...
- Android 学习笔记 BroadcastReceiver广播...
PS:不断提升自己,是件好事... 学习内容: 1.BroadcastReceiver的使用.. 2.通过BroadcastReceiver去启动Service... 1.BroadcastRecei ...
- android java广播,[原]Android应用程序发送广播(sendBroadcast)的过程分析
前面我们分析了Android应用程序注册广播接收器的过程,这个过程只完成了万里长征的第一步,接下来它还要等待ActivityManagerService将广播分发过来.ActivityManagerS ...
- android s静态广播,重走android(3)广播 · sk600’s Studio
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 广播作为android四大组件之一,应用非常广泛,主要通过intent这个"介质"来传递信息,可以完 ...
- 广播接收者android,电话拦截广播,电话接收者demo
一.Android广播机制介绍 广播机制最大的特点就是发送方并不关心接收方是否接到数据,也不关心接收方是如何处理数据的. Android中广播的是操作系统中产生的各种各样的事件.例如,收到一条短信就会 ...
- Android 广播接收不到短信问题,Android中短信的广播接收问题
首先,接收短信的机制是接收广播,由系统发出短信到来的广播,我们对短信广播进行注册,从而接收. import java.util.Date; import android.content.Broadca ...
最新文章
- 互联网晚报 | 3月28日 星期一 | 上海医保局辟谣:新冠患者要自负医疗费用不属实 ;十荟团关停全国所有业务...
- 求解数组中子数组连续元素的之和的最大值
- 2018江苏冬令营5 交换矩阵
- java中else语句有错_java 菜鸟 If else有错误
- 在使用 Go 两年之后,我又转回 PHP 了
- mysql管理密码修改及管理权限设定(zz)
- C语言如何控制控制台窗口大小
- 计算机二级Java上机环境安装与使用
- Android ViewStub动态加载View
- springboot+安卓app电子阅览室系统毕业设计源码016514
- Codeforces Round #467 (Div. 2) D. Sleepy Game
- 支付行业常见信息安全合规认证小记
- 如何写一个Vue自定义指令
- Java之Eclipse实现——在海绵宝宝的比基尼海滩里投喂鱼食
- 计算机考研调剂心酸,考研,这一路走来、辛酸苦辣~百感交集~(转)
- c语言信用卡号验证,Javascript验证Visa和MasterCard信用卡号的方法
- 解决No thread-bound request found: Are you referring to request attributes outside of an actual web.异常
- 小布助手,身入大千世界
- 阿里云服务器选择不同的地域有何区别,应该如何选择?
- 虚拟机里的linux磁盘空间扩容