1. 为什么需要广播接受者
生活中的广播:
电台:发送一定频道的广播消息,50mhz;
收音机:调整到一定频道,接收广播消息;
android 应用程序里面的电台:系统内置的一个服务,会把事件(电量不足、电量充满、开机启动完成)作为一个广播消息发送其他的接收者;
android 应用程序里面的收音机:自己写的一个广播接收者的一个类。
2. 广播接受者案例 1-ip 拨号器 (重点)
开发广播接收者的步骤:
(1)买个收音机:
- public class OutCallBroadCastReceiver extends BroadcastReceiver {
- public void onReceive(Context context, Intent intent) {}
- }
- (2)插上电池:
- (3)调整到一个频道:
- 3. 广播接受者案例2-短信监听器(重点)
- pdus : protocol data unit s 协议数据单元
- 特点:
- (1)即使广播接收者没有运行,当广播消息到达的时候,系统会自动启动广播接收者的进程,调用onReceive方法,接收消息。
- (2)4.0版本之后为了安全考虑,要求应用程序必须要有界面,必须被用户运行过一次,广播接受者才会生效
- (3)4.0版本的强行停止相当于冻结一个应用,一旦应用程序被用户强行停止了,广播接受者就不会生效了。直到用户手工打开这个应用程序为止。
- (4)4.0版本之前没有这样的安全设计
- 步骤:
- (1)买个收音机
- (2)插上电池
- (3)调整到一个频道
- 配置文件:
- 代码:
- package com.itheima.smslistener;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.telephony.gsm.SmsMessage;
- 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);
- }
- }
- }
- 4. 广播接受者案例3_sd卡状态监听(重点)
- 测试的时使用2.3的模拟器,4.0之后版本没有卸载、挂载、移除SD卡的功能。
- 步骤:
- (1)买个收音机
- (2)插上电池
- (3)调整到一个频道
- 配置文件:
- 代码:
- package com.itheima.sdlistener;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.widget.Toast;
- 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();
- }
- }
- }
- 5. 广播接受者案例_开机启动(重点)
- 步骤:
- (1)买个收音机
- (2)插上电池
- (3)调整到一个频道
- 要做的事情:让软件开启后关闭不了,禁用返回键和最小化键(小房子键);
- 配置文件:
- 代码:
- package com.itheima.lesuo;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- 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启动完成*********************************"); }}
- 6. 广播接受者案例_卸载安装(重点)
- 配置文件:
- 代码:
- package com.itheima.azxz;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.widget.Toast;
- 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();
- }
- }
- }
- 7. 发送自定义广播
- 创建广播电台的步骤:
- // 创建一个传递消息的意图对象Intent intent = new Intent();// 设置要广播的事件类型intent.setAction("com.lile.broadcast.HMSSDT");// 设置广播的消息数据intent.putExtra("news", "阿乐广播,晚上12点半准时开播.........");// 发送一个广播消息sendBroadcast(intent);
- 8. 有序广播和无序广播(重点)
- 无序广播:
- 广播接收者只要注册接收相应的事件类型,就能接收到的广播;
- // 发送一个广播消息(无序广播)sendBroadcast(intent);
- 有序广播:
- 当广播把消息发送出去后,消息会根据广播接收者的优先级从高到低一级一级地下发消息。可以拦截消息,也可以修改消息。
- 发送有序广播:
- Intent intent = new Intent();
- intent.setAction("com.lile.orderedbroadcast.ZYFFNTBT"); // 发送一个有序的广播// intent 意图// permission 指定接收者需要添加了权限// resultReceiver 指定哪个广播接收者最后接到消息// scheduler 消息处理器// initialCode 给消息指定初始代码// initialData 指定消息的数据// initialExtras 指定额外的参数sendOrderedBroadcast(intent, null, null, null, 1, "国务院开始发放2017年农田补贴:900元", null);
- 广播接收者的配置文件:
- 广播接收者的代码:
- String info = getResultData();
- System.out.println("我是省级人民政府,已经接收到了中央发的消息:" + info); // Toast.makeText(context, "我是省级人民政府,已经接收到了中央发的消息:"+info, 0).show();setResultData("国务院开始发放2014年农田补贴:400元");
- 9. 补间动画
- /** * 透明度变化的动画 * @param view */
- public void alpha(View view) {
- AlphaAnimation aa = new AlphaAnimation(0, 1.0f); // 动画播放的时间 aa.setDuration(2000); // 重复次数 aa.setRepeatCount(2); //设置重复的模式 aa.setRepeatMode(Animation.REVERSE); iv.startAnimation(aa);}/** * 旋转变化的动画 * @param view */public void rotate(View view) { RotateAnimation ra = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); // 动画播放的时间 ra.setDuration(2000); // 重复次数 ra.setRepeatCount(2); ra.setRepeatMode(Animation.REVERSE); iv.startAnimation(ra);}/** * 位移变化的动画 * @param view */public void trans(View view) { TranslateAnimation ta = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, -0.5f, Animation.RELATIVE_TO_PARENT, 0.5f, Animation.RELATIVE_TO_PARENT, -0.5f, Animation.RELATIVE_TO_PARENT, 0.5f); ta.setDuration(2000); // 重复次数 ta.setRepeatCount(2); ta.setRepeatMode(Animation.REVERSE); iv.startAnimation(ta);}/** * 缩放变化的动画 * @param view */public void scale(View view) { ScaleAnimation sa = new ScaleAnimation(0.1f, 2.0f, 0.1f, 2.0f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f); sa.setDuration(2000); // 重复次数 sa.setRepeatCount(2); sa.setRepeatMode(Animation.REVERSE); sa.setFillAfter(true); // 设置填充after的效果 iv.startAnimation(sa);}/** * 动画集合 * @param view */public void set(View view){ // 动画插入器 AnimationSet set = new AnimationSet(false); RotateAnimation ra = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); // 动画播放的时间 ra.setDuration(2000); // 重复次数 ra.setRepeatCount(2); ra.setRepeatMode(Animation.REVERSE); TranslateAnimation ta = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, -0.3f, Animation.RELATIVE_TO_PARENT, 0.3f, Animation.RELATIVE_TO_PARENT, -0.3f, Animation.RELATIVE_TO_PARENT, 0.3f); ta.setDuration(2000); // 重复次数 ta.setRepeatCount(2); ta.setRepeatMode(Animation.REVERSE); ScaleAnimation sa = new ScaleAnimation(0.1f, 2.0f, 0.1f, 2.0f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f); sa.setDuration(2000); // 重复次数 sa.setRepeatCount(2); sa.setRepeatMode(Animation.REVERSE); set.addAnimation(ra); set.addAnimation(sa); set.addAnimation(ta); iv.startAnimation(set);}
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: http://www.92to.com/bangong/2017/04-17/20572270.html