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

1.Android的广播机制介绍

收听收音机也是一种广播,在收音机中有很多个广播电台,每个广播电台播放的内容都不相同。接受广播时广播(发送方)并不在意我们(接收方)接收到广播时如何处理。好比我们收听交通电台的广播,电台中告诉我们现在在交通状况如何,但它并不关心我们接收到广播时做如何做出处理,这不是广播应该关心的问题,OK,到这里我们从生活中的一些小例子浅浅的理解了一下广播,那么Android 中的广播是如何操作的呢?

在 Android 里面有各种各样的广播,比如电池的使用状态,电话的接收和短信的接收都会产生一个广播,应用程序开发者也可以监听这些广播并做出程序逻辑的处理。

一个经典的电话黑名单,首先通过将黑名单号码保存在数据库里面,当来电时,我们接收到来电广播并将黑名单号码与数据库中的某个数据做匹配,如果匹配的话则做出相应的处理,比如挂掉电话、比如静音等等

2.BroadcaseReceiver的作用

1.同一app内部的同一组件内的消息通信(单个或多个线程之间);

2.同一app内部的不同组件之间的消息通信(单个进程);

3.同一app具有多个进程的不同组件之间的消息通信;

4.不同app之间的组件之间消息通信;

5.Android系统在特定情况下与App之间的消息通信。

3.BroadcaseRecevier的实现方法

1.创建一个类,继承BroadcastRecevier,并重写onRecevier()方法,onRecevier方法为接收到监听事件的回调方法

package com.example.broadcasereceiverdemo;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

public class TestReceiver extends BroadcastReceiver{

public TestReceiver(){

System.out.println("TestReceiver create");

}

@Override

public void onReceive(Context context, Intent intent) {

// TODO Auto-generated method stub

System.out.println("onReceive///");

}

}

2.注册广播

注册广播有两种方法

1.在AndroidManifrst.xml文件中注册

说明:创建一个receiver标签,intentfilter,设置接听的事件类型,Android:name:类名,Intent-filter:用来过滤发送的广播事件,只有符合里面的action的事件,才会被接收处理

例如:监听电池状态,就需要使用这样的方法进行注册

e1c2a85e7f233003492570969497d03a.png

2.在程序代码中进行注册

注册方法比较灵活,当想使用的时候进行注册,不使用的时候进行关闭方法

1.registerReceiver(receiver,filter);注册, reciver对象,过滤的事件

2.unregisterReceiver(receiver);取消注册, reciver对象

如果一个BroadcaseReceiver用于更新UI,那么通常会使用这样的方法,在启动的时候进行注册,在不可见的时候进行取消注册

// TODO Auto-generated method stub

//1.创建一个广播接收器对象

TestBroadcastRecevier test = new TestBroadcastRecevier();

//2.创建一个Intent-filter

IntentFilter filter = new IntentFilter();

//3.为Intent-Filter添加Action

filter.addAction("android.provider.Telephony.SMS_RECEIVED");

//4.注册广播接收器

MainActivity.this.registerReceiver(test, filter);

4. Android内置的BroadcaseAction

275e0998b996efebdd36505ab5e32ad3.png

5.练习例子

1.在Activity中发出广播

1.定义一个类,继承BroadcastRecevier,重新onRecevier方法

package com.example.broadcastrecevierdemo;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

public class TestBroadcastRecevier extends BroadcastReceiver {

public TestBroadcastRecevier(){

System.out.println("TestBroadcastRecevier 对象创建");

}

@Override

public void onReceive(Context arg0, Intent arg1) {

// TODO Auto-generated method stub

System.out.println("onReceiver");

}

}

2.注册广播

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

android:name=".MainActivity"

android:label="@string/app_name" >

3.发送广播事件

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

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

sendBtn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

// TODO Auto-generated method stub

Intent intent = new Intent();

intent.setAction(Intent.ACTION_EDIT);

MainActivity.this.sendBroadcast(intent);

}

});

}

点击按钮,程序运行结果

d1e33fd024f8cd743fad51f70fb808c0.png

声明周期说明:从上面的Demo中可以看出,点击一次调用一次构造方法,然后调用onReceive方法,可知道当处理完成之后,广播接收器对象就会失效,下次再次调用,重新创建对象

2.接收系统广播

1.定义一个类,继承BroadcastRecevier,重新onRecevier方法,并实现短信内容的接收

public class TestBroadcastRecevier extends BroadcastReceiver{

@Override

public void onReceive(Context context, Intent intent) {

// TODO Auto-generated method stub

System.out.println("xx");

//接收参数

Bundle bundle = intent.getExtras();

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

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

System.out.println(message.length);

for(int i=0 ; i

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

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

Toast.makeText(context, message[i].getDisplayMessageBody(), Toast.LENGTH_SHORT).show();

}

}

}

2.绑定广播接收类的监听代码

/**

* 绑定广播事件处理

* @author Administrator

*

*/

class MyRegistClick implements OnClickListener{

@Override

public void onClick(View arg0) {

// TODO Auto-generated method stub

//1.创建一个广播接收器对象

test = new TestBroadcastRecevier();

//2.创建一个Intent-filter

IntentFilter filter = new IntentFilter();

//3.为Intent-Filter添加Action

filter.addAction(SMS_ACTION);

//4.注册广播接收器

MainActivity.this.registerReceiver(test, filter);

Toast.makeText(MainActivity.this, "绑定成功", Toast.LENGTH_SHORT).show();

}

}

解除绑定的点击事件监听代码

/**

* 解除广播

* @author Administrator

*

*/

class MyUnRegistClick implements OnClickListener{

@Override

public void onClick(View arg0) {

// TODO Auto-generated method stub

MainActivity.this.unregisterReceiver(test);

Toast.makeText(MainActivity.this, "解除绑定成功", Toast.LENGTH_SHORT).show();

}

}

3.增加接收短信权限

package="com.example.broadcastreciverdemo"

android:versionCode="1"

android:versionName="1.0" >

android:minSdkVersion="14"

android:targetSdkVersion="14" />

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

android:name=".MainActivity"

android:label="@string/app_name" >

4.使用Emalator Controller实现Eclipse发送短信到模拟器

0fad10cb2da22fee6266bf5b15049846.png

来源:https://www.cnblogs.com/qadada/p/4515290.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值