Android广播常用案例
2016-05-03 22:49
246 查看
ip拨号器
以拨打电话广播接收为例介绍步骤:1. 定义一个类 继承 BroadCastReceiver ,并重写onReceive函数
2. 在清单文件注册广播接收 Receiver action
<receiver android:name="com.itheima.ipcall.OutCallBroadCastReceiver" />
<intent-filter >
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
3. 广播事件到来之后就会执行onReceive
注意:即使广播接收者没有运行,当广播消息到达的时候,系统会自动启动广播接收者的进程,调用onReceive方法,接收消息。
4.0版本之后为了安全考虑,要求应用程序必须要有界面,必须被用户运行过一次(待验证),广播接受者才会生效
4.0版本的强行停止相当于冻结一个应用,一旦应用程序被用户强行停止了,广播接受者就不会生效了。直到用户手工打开这个应用程序为止。
在onReceive中获取数据并修改(NEW_OUTGOING_CALL广播为有序广播,可以修改数据下面会介绍有序广播)
public class OutGoingCallReceiver extends BroadcastReceiver{ //当我接收到 外拨电话的事件的时候 会执行该方法 @Override public void onReceive(Context context, Intent intent) { //1 获取到当前我拨打的号码 String number = getResultData(); //获取我们外拨电话号码 //2 获取ip号码 SharedPreferences sp = context.getSharedPreferences("config", 0); String ipNumber = sp.getString("number", ""); //3 把ipnumber 加入到 拨打号码的前面 if (number.startsWith("0")) { String newNumber = ipNumber + number; //新号码 // 改变当前 广播的结果 setResultData(newNumber); } } }
短信监听器
主要配置
<uses-permission android:name="android.permission.RECEIVE_SMS"/> <receiver android:name="com.itheima.smslistener.SMSBroadCastReceiver"> <intent-filter > <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>
onReceive代码
public class SMSBroadCastReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Object[] objs = (Object[]) intent.getExtras().get("pdus"); for(Object obj : objs){ SmsMessage sms = SmsMessage.createFromPdu((byte[]) obj); String content = sms.getMessageBody(); String srcPhone = sms.getOriginatingAddress(); System.out.println("content========"+content); System.out.println("srcPhone========"+srcPhone); } }
SD卡状态监听
主要配置
<receiver android:name="com.itheima.sdlistener.SDBroadCastReceiver"> <intent-filter > <action android:name="android.intent.action.MEDIA_MOUNTED" /> <action android:name="android.intent.action.MEDIA_UNMOUNTED" /> <action android:name="android.intent.action.MEDIA_REMOVED" /> <!-- 必须加上data这个属性 --> <data android:scheme="file"/> </intent-filter> </receiver>
onReceive代码
public class SDBroadCastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if("android.intent.action.MEDIA_MOUNTED".equals(action)){ Toast.makeText(context, "已经插上了SD卡.................", 0).show(); } if("android.intent.action.MEDIA_UNMOUNTED".equals(action)){ Toast.makeText(context, "拔掉了SD卡.................", 0).show(); } if("android.intent.action.MEDIA_REMOVED".equals(action)){ Toast.makeText(context, " 移除了SD卡.................", 0).show(); } } }
开机启动监听
目的
让软件开机后打开,并关闭不了:禁用返回键和最小化键(小房子键);
主要配置
<receiver android:name="com.itheima.lesuo.BootCompletedBroadCastReceiver"> <intent-filter > <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver>
onReceive代码
public class BootCompletedBroadCastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //开启mainactivity Intent i = new Intent(context,MainActivity.class); //告诉activity自己来维护任务栈,如果任务栈没有当前任务,就会重新创建一个任务放入任务栈 i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); System.out.println("***********88888888888启动完成*********************************"); } }
软件卸载安装
主要配置
<receiver android:name="com.itheima.azxz.AZXZBroadCastReceiver"> <intent-filter > <action android:name="android.intent.action.PACKAGE_INSTALL" /> <action android:name="android.intent.action.PACKAGE_REMOVED" /> <action android:name="android.intent.action.PACKAGE_ADDED" /> <!-- 必须添加这个属性 --> <data android:scheme="package"/> </intent-filter> </receiver>
onReceive代码
public class AZXZBroadCastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if("android.intent.action.PACKAGE_INSTALL".equals(action)){ Toast.makeText(context, "安装了一个新软件...................", 0).show(); } if("android.intent.action.PACKAGE_REMOVED".equals(action)){ Toast.makeText(context, "卸载了一个软件...................", 0).show(); } if("android.intent.action.PACKAGE_REPLACED".equals(action)){ Toast.makeText(context, "重新安装了一个软件...................", 0).show(); } } }
发送自定义广播(无序广播)
创建广播发送者的步骤:
//创建一个传递消息的意图对象Intent intent = new Intent();
//设置要广播的事件类型
intent.setAction("com.itheima.broadcast.HMSSDT");
//设置广播的消息数据
intent.putExtra("news", "49期,晚上12点半准时开播.........");
//发送一个广播消息
sendBroadcast(intent);
有序广播和无序广播
* 无序广播:
广播接收者只要注册接收相应的事件类型,就能接收到的广播;//发送一个广播消息(无序广播)
sendBroadcast(intent);
* 有序广播:
当广播把消息发送出去后,消息会根据广播接收者的优先级从高到低一级一级地下发消息。可以拦截消息,也可以修改消息。
发送有序广播:
Intent intent = new Intent(); intent.setAction("com.itheima.orderedbroadcast.ZYFFNTBT"); //发送一个有序的广播 //intent 意图 //permission 指定接收者需要添加了权限 //resultReceiver 指定哪个广播接收者最后接到消息(这个广播接收者不需要注册也可以接收广播) //scheduler 消息处理器 //initialCode 给消息指定初始代码 //initialData 指定消息的数据 //initialExtras 指定额外的参数 sendOrderedBroadcast(intent, null, null, null, 1, "国务院开始发放2014年农田补贴:900元", null);
有序广播接收者的配置文件:
<receiver android:name="com.itheima.zf.ProvinceBroadCastReceiver"> <intent-filter android:priority="1000" > <action android:name="com.itheima.orderedbroadcast.ZYFFNTBT"/> </intent-filter> </receiver>
有序广播接收者的代码:
String info = getResultData(); System.out.println("---------我是省级人民政府,已经接收到了中央发的消息:"+info); //Toast.makeText(context, "我是省级人民政府,已经接收到了中央发的消息:"+info, 0).show(); setResultData("国务院开始发放2014年农田补贴:400元");
相关文章推荐
- 利用IE收听“广播”
- Android广播接收机制详细介绍(附短信接收实现)
- Android中BroadcastReceiver(异步接收广播Intent)的使用
- Jquery实现仿腾讯微博发表广播
- Android使用广播(BroadCast)实现强制下线的方法
- Android基于广播事件机制实现简单定时提醒功能代码
- Android使用BroadcastReceiver实现手机开机之后显示画面的功能
- Android提高之BroadcastReceiver实例详解
- 详解Android中BroadCastReceiver组件
- Android编程四大组件之BroadcastReceiver(广播接收者)用法实例
- Android实现静态广播监听器的方法
- Android中的广播、服务、数据库、通知、包等术语的原理和介绍(图解)
- Android中的广播(BroadCast)详细介绍
- Android中的广播和广播接收器代码实例
- Android开发之BroadcastReceiver用法实例分析
- Android开发之广播机制浅析
- Android 广播大全 Intent Action 事件详解
- 广播
- 网络广播风暴的几种原因