博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安卓基础干货(七):安卓广播的学习
阅读量:4558 次
发布时间:2019-06-08

本文共 7789 字,大约阅读时间需要 25 分钟。

为什么需要广播接受者

广播:

1、电台:发送一定频道的广播消息,50mhz;

2、收音机:调整到一定频道,接收广播消息;

android应用程序里面的电台:系统内置的一个服务,会把事件(电量不足、电量充满、开机启动完成)作为一个广播消息发送其他的接收者;

android应用程序里面的收音机:自己写的一个广播接收者的一个类。

广播接受者案例_ip拨号器(重点)

  • 开发广播接收者的步骤:

    1、买个收音机:

    public class OutCallBroadCastReceiver extends BroadcastReceiver {      public void onReceive(Context context, Intent intent) {  }

    2、插上电池:

    3、调整到一个频道:

广播接受者案例_短信监听器(重点)

pdus : protocol data unit s 协议数据单元

特点:即使广播接收者没有运行,当广播消息到达的时候,系统会自动启动广播接收者的进程,调用onReceive方法,接收消息。4.0版本之后为了安全考虑,要求应用程序必须要有界面,必须被用户运行过一次,广播接受者才会生效4.0版本的强行停止相当于冻结一个应用,一旦应用程序被用户强行停止了,广播接受者就不会生效了。直到用户手工打开这个应用程序为止。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);                }}}

广播接受者案例_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();        }    }}

广播接受者案例_开机启动(重点)

步骤:

1、买个收音机 2、插上电池 3、调整到一个频道

要做的事情:让软件开启后关闭不了:

禁用返回键和最小化键(小房子键);
  • 示例代码

配置文件:

代码:

package com.itheima.lesuo;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;public class BootCompletedBroadCastReceiver extends BroadcastReceiver {@Overridepublic 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启动完成*********************************");    }}

广播接受者案例_卸载安装(重点)

  • 示例代码:

配置文件:

代码:

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();        }            }}

发送自定义广播

创建广播电台的步骤:

//创建一个传递消息的意图对象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);

    广播接收者的配置文件:

    广播接收者的代码:

    String info = getResultData();  System.out.println("---------我是省级人民政府,已经接收到了中央发的消息:"+info);  //Toast.makeText(context, "我是省级人民政府,已经接收到了中央发的消息:"+info, 0).show();  setResultData("国务院开始发放2014年农田补贴:400元");

    补间动画

    /**   * 透明度变化的动画   * @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);  }

转载于:https://www.cnblogs.com/fanchcho/p/9233950.html

你可能感兴趣的文章
print 与标准输出
查看>>
pytest单元测试框架(day01)
查看>>
利用Azure Automation实现云端自动化运维(2)
查看>>
Linux学习说明
查看>>
【网络流24题】负载平衡问题(费用流)
查看>>
bzoj 3507 DP+哈希
查看>>
递归问题==优化 还有数据库sqlreader
查看>>
IOS第四天(2:字典转模型plist)
查看>>
什么是数据集
查看>>
Android开发数据库三层应用-DataSnap
查看>>
关于setTimeout运行机制
查看>>
2019 Multi-University Training Contest 4
查看>>
学号 《信息安全系统设计基础》第7周学习总结(一)
查看>>
POJ1741Tree [点分治]【学习笔记】
查看>>
BZOJ 3238: [Ahoi2013]差异 [后缀自动机]
查看>>
UVA 12633 Super Rooks on Chessboard [fft 生成函数]
查看>>
memcache 启动 failed to start
查看>>
欧拉函数与欧拉定理
查看>>
fzyzojP2984 -- 序列变换问题
查看>>
poj 2888 Magic Bracelet
查看>>