1.概述

广播接收者(BroadcastReceiver)用于接收广播,在Android系统中,广播应用非常常见。例如当开机完成后系统会产生一条action为android.intent.action.BOOT_COMPLETED的广播,可达到开机启动的目的;当手机接收到一条短信,系统会产生一条action为android.provider.Telephony.SMS_RECEIVED的广播,接收到这条广播就对短信进行处理 等等。

动态广播接收器比静态广播接收器要接受的早,可以尝试在AndroidManifest.xml静态和java代码动态注册广播接收者~~降低被杀死的概率

2.简单实现广播接收者

//1.继承BroadcastReceiver,覆写onReceive方法,intent包含广播对象信息public class SmsReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {/* *  简要动作,一般不超过10秒 *  ...To Do.. */}}
    

3.广播类型

(1).普通广播

//发送一个广播,所以监听该广播的广播接收者都可以监听到改广播public void click(View view){Intent intent = new Intent(this, SmsReceiver.class);sendBroadcast(intent);}

(2).异步广播

/* * 在onCreate()使用registerReceiver(BroadcastReceiver, IntentFilter)注册,但要注意在onDestroy()要解除注册 *///1.在onCreate注册receiver@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);IntentFilter filter = new IntentFilter();filter.addAction("baidu.myreceiver");registerReceiver(receiver, filter);}//2.在onDestroy要解除注册receiver@Overrideprotected void onDestroy() {unregisterReceiver(receiver);super.onDestroy();}

(3).有序广播

/* * 按照接收者的优先级顺序接收广播,取值范围为1000到-1000,值越大,优先级越高,安卓系统关键接收者默认为0, * 优先级可以在xml文件的intent-filter标签中的 priority 中声明。 */public class MainActivity extends Activity {public void click(View view){Intent intent = new Intent();intent.setAction("com.baidu.smsreceiver");//1.1.发送一个有序广播sendOrderedBroadcast(intent, receiverPermission);//1.2.发送一条有序广播,为该广播添加一些属性,resultReceiver为最终执行的接收者,即使abortBroadcast();也要执行sendOrderedBroadcast(intent, receiverPermission, resultReceiver, scheduler, initialCode, initialData, initialExtras)}}public class SmsReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Object[] objs = (Object[]) intent.getExtras().get("pdus");for(Object obj: objs){SmsMessage smsMessage = SmsMessage.createFromPdu((byte[])obj);String content = smsMessage.getMessageBody();String number = smsMessage.getOriginatingAddress();}abortBroadcast();//终止向下一个接收者传递}}
有序广播可以终止,无序的广播不可以终止!

4.注册广播

(1).静态注册

                

(2).动态注册

查看上面的一步广播,注意:注册之后,在当前activity销毁时在onDestroy()中解除注册

使用动态注册的生命周期与应用相关,而静态注册则周期更长,即使应用没有被启动,在监听到需要接收的广播时,也可以接收!

5.自定义permission

//1.sendBroadcast一个广播并接收一个使用权限public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void click(View view){Toast.makeText(this, "Ok~!!~", 1).show();Intent intent = new Intent();intent.setAction("com.baidu.smsreceiver");sendBroadcast(intent, "baidu.permission");//为该广播添加一个权限,但需要在该项目的项目清单文件中定义及添加权限}}
<?xml version="1.0" encoding="utf-8"?>                            
//3.接收者继承BroadcastReceiver,覆写onReceive方法public class SmsReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// ...}}
<?xml version="1.0" encoding="utf-8"?>                                                                                    

6.应用

(1).短信窃听器

/** 1.继承BroadcastReceiver,覆写onReceive方法*/public class SmsReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {//1.1接收到短信信息,get("pdus"),可能包含多条短信信息,故用数组表示Object[] objs = (Object[]) intent.getExtras().get("pdus");for(Object obj: objs){//1.2转换为每条短信的byte[] 得到smsMessage对象SmsMessage smsMessage = SmsMessage.createFromPdu((byte[])obj);//1.3对短信操作,获得关键数据String content = smsMessage.getMessageBody();//短信内容String number = smsMessage.getOriginatingAddress();//短信号码if("110".equals(number)){abortBroadcast();//终止广播向下传递SmsManager manager = SmsManager.getDefault();//得到Sms短信管理器//转发一条短信,需要声明权限manager.sendTextMessage("5556", null, "Kill", null, null);}System.out.println("content="+content);System.out.println("number="+number);}Toast.makeText(context, "OK!", Toast.LENGTH_SHORT).show();}}
                                            

(2).电话拨打器

public class TextReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {//得到拨打电话号码String number = getResultData();//处理拨打的电话号码setResultData("010"+number);System.out.println(number);}}
                                    

更多相关文章

  1. android实现耳机插入和拔出状态检测
  2. android开机自启动失败的原因
  3. android静态广播添加权限
  4. Android(安卓)四大核心组件
  5. android开发 关于BroadCast Receiver
  6. Android(安卓)开机广播BOOT_COMPLETED延迟接收问题解决
  7. Android四大组件中每个组件的作用是什么?它们都可以开启多进程吗?
  8. Android(安卓)四大组件之一:BroadcastReceiver广播机制
  9. Android(安卓)常用的三大组件

随机推荐

  1. android使用正则表达式
  2. Android调用系统下载服务下载文件
  3. Android打开微信小程序
  4. android SQLiteDatabase之一
  5. Android(安卓)EventBus 传递消息
  6. Android手机开发:开机自动启动程序
  7. Android(安卓)自定义输入框
  8. Android的Button监听
  9. AS gradle
  10. android 进度对话框的使用