• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > android四大组件之Broadcast,androidbroadcast

android四大组件之Broadcast,androidbroadcast

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android broadcast,android中broadcast,broadcast,broadcast播旗舰店,broadcast裤子多钱等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

android四大组件之Broadcast,androidbroadcast


  • 广播的概念
    • 现实中:我们常常使用电台通过发送广播发布消息,买个收音机,就能收听
    • Android:系统在产生某个事件时发送广播,应用程序使用广播接收者接收这个广播,就知道系统产生了什么事件。Android系统在运行的过程中,会产生很多事件,比如开机、电量改变、收发短信、拨打电话、屏幕解锁
  • 广播接收者的注册

    Android四大组件都要在清单文件中注册

    广播接收者比较特殊,既可以在清单文件中注册,也可以直接使用代码注册

    有的广播接收者,必须代码注册如 电量改变,屏幕锁屏和解锁

    • 使用清单文件配置

      <receiver android:name="接收广播的实现类所在的包">
          <intnt-filter>
              <android:name="要接收的广播">
              <android:data="">
              ......
          </intent-filter>
      </receiver>
      
    • 通过代码的实现

      //创建广播接收者对象
      receiver = new ScreenOnOffReceiver();
      //通过IntentFilter对象指定广播接收者接收什么类型的广播
      IntentFilter filter = new IntentFilter();
      filter.addAction(Intent.ACTION_SCREEN_OFF);
      filter.addAction(Intent.ACTION_SCREEN_ON);
      //注册广播接收者
      registerReceiver(receiver, filter);
      
    • 解除注册广播接收者 解除注册之后,广播接收者将失去作用

      unregisterReceiver(receiver);
      
    • 为什么
  • 广播的接收

    在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。
    而BroadcastReceiver是对发送出来的Broadcast进行过滤接受并响应的一类组件。
    广播接收者(BroadcastReceiver)用于接收广播Intent的, 广播Intent的发送是通过调用sendBroadcast
    /sendOrderedBroadcast来实现的。通常一个广播Intent可以被订阅了此Intent的多个广播接收者所接收。
    
  • 实现一个BroadcastReceiver 接收BroadCast发送的广播

    需求:监听用户拨打电话,在用户拨打电话号码前自动加上17951等

    拦截的广播:

    <action android:name="android.intent.action.NEW_OUTGOING_CALL"></action>
    

    需要的权限:

    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
    

    1.新创建一个Android工程《IPCaller》

    2.在src目录下新创建一个类IPCallerReceiver继承BroadcastReceiver,重写OnReceive方法。

    public class IPCallReveiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
        //获取拨打的电话号码
        String resultData = getResultData();
        //在电话号码前加上17951,然后返回数据
        setResultData("17951"+resultData);
        }
    }
    

    3.在AndroidManifest.xml中注册广播接收者

    <receiver android:name="com.itheima.ipcaller.IPCallReveiver">
        <intent-filter android:priority="1000">
            <action android:name="android.intent.action.NEW_OUTGOING_CALL"></action>
        </intent-filter>
    </receiver>
    

    在下面的配置文件中 <intent-filter android:priority="1000">属性代表着给当前接收者设置优先级,优先级越高越优先接收到广播(只有有序广播注册才有效)

    运行上面的代码,然后拨打电话5556,发现拨出去的号码已经变为179515556。 运行效果图如下:

  • 发送自定义广播

    • 发送无序广播

      • 无序广播不可以被拦截,如果被拦截的话会报错:
      • 无序广播可以视为所有广播接收者同时接收到广播
      • 无序广播使用sendBroadcast方法来发送

        public void sendBroadcast(View view){
            //定义一个意图
            Intent intent = new Intent();
            //设置Action 可以接受到该广播的意图过滤器
            intent.setAction("com.itheima.broadcast");
            //绑定数据
            intent.putExtra("data", "我是无序广播数据");
            //发送无序广播
            sendBroadcast(intent);
        }
        
    • 发送有序广播

      • 有序广播可以被拦截,且优先级搞得接收者可以拦截优先级低的
      • 广播接受者的优先级的取值范围是:1000(最高)~ -1000(最低)
      • 相同的优先级下,接收的顺序要看清单文件中的声明顺序,先声明先接收广播
      • 有序广播使用sendOrderedBroadcast()方法发送,可以使用abortBroadcast()方法拦截 *广播接收者的优先级可以在清单文件中声明接收者时,在<intent-filter>标签下通过设置“android:property”属性来设置

      我们新创建一个项目,来演示无序广播的发送和接收过程

      2.在默认的MainActivity的布局中添加一个按钮,绑定事件,该事件的核心功能是发送一个有序广播,MainActivity类代码清单如下:

      public class MainActivity extends Activity {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
      }
      public void sendOrder(View view) {
          // 意图
          Intent intent = new Intent();
          //定义动作
          intent.setAction("com.itheima.data");
          //发送有序广播
          //第一个参数 Intent类型:意图
          //第二个参数 String类型 receiverPermission,接收器需要的权限
          //第三个参数BroadcastReceiver类型,自己定义的接收器作为最终接收器
          //第四个参数Handler类型,用于执行接收器的回调,如果为null则在主线程中执行
          //第五个参数int类型,结果代码的初始码
          //第六个参数初始化参数
          //第七个参数Bundle类型,额外的数据
          sendOrderedBroadcast(intent, null, null,
          null, RESULT_OK, "1万元钱", null);
      }
      

      3.分别编写MyReceiver和MyReceiver2类,继承BroadcastReceiver类

      MyReceiver类代码清单:

      public class MyReceiver extends BroadcastReceiver {
          @Override
          public void onReceive(Context context, Intent intent) {
              String action = intent.getAction();
              String resultData = getResultData();
              Toast.makeText(context, "MyReceiver接收到"+action+"发布的广播:"+resultData, 1).show();
              System.out.println("MyReceiver接收到"+action+"发布的广播:"+resultData);
          }
      }
      

      MyReceiver2类代码清单:

      public class MyReceiver2 extends BroadcastReceiver {
          @Override
          public void onReceive(Context context, Intent intent) {
              String action = intent.getAction();
              String resultData = getResultData();
              Toast.makeText(context, "MyReceiver2接收到"+action+"发布的广播:"+resultData, 1).show();
              System.out.println("MyReceiver2接收到"+action+"发布的广播:"+resultData);
      
          }
      }
      

      4.在AndroidManifest.xml中注册MyReceiver和MyReceiver2:

      <receiver android:name="com.itheima.broadcastAndreceiver.MyReceiver">
          <intent-filter android:priority="1000">
           <action android:name="com.itheima.data"></action>
          </intent-filter>
      </receiver>
      <receiver android:name="com.itheima.broadcastAndreceiver.MyReceiver2">
          <intent-filter android:priority="-1000">
              <action android:name="com.itheima.data"></action>
          </intent-filter>
      </receiver>
      

      在上面清单文件中我们给MyReceiver设置了最高优先级1000,给MyReceiver2设置了最低优先级-1000。

      5.下面我们分多钟情况,分别演示有序广播的接收规律

      直接部署上面的工程到模拟器,点击发送广播按钮,控制台结果为:

      6.修改MyReceiver类的代码:在onReceive方法中添加abortBroadcast()方法,

      public class MyReceiver extends BroadcastReceiver {
      
          @Override
          public void onReceive(Context context, Intent intent) {
          String action = intent.getAction();
          String resultData = getResultData();
          Toast.makeText(context, "MyReceiver接收到"+action+"发布的广播:"+resultData, 1).show();
          System.out.println("MyReceiver接收到"+action+"发布的广播:"+resultData);
          abortBroadcast();
          }
      }
      

      然重新部署该工程,运行,点击发送广播按钮。这时控制台打印信息为

      这说明优先级高的的广播接收者可以修改或拦截广播 优先级低的广播接收

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android-BroadcastReceiver详解
  • BroadcastReceiver--Android广播机制,broadcastreceiver
  • Android--BroadcastReceiver应用详解
  • android四大组件之Broadcast,androidbroadcast

相关文章

  • 2017-05-26配置adb环境变量,adb环境变量
  • 2017-05-26浅谈Android Small插件化框架源码
  • 2017-05-26Android开发学习——android存储,android开发存储
  • 2017-05-26安卓开源项目周报0104,安卓开源项目0104
  • 2017-05-26Linux大文件已删除,但df查看已使用的空间并未减少解决
  • 2017-05-26ORB_SLAM2在Android上的移植过程
  • 2017-05-26KeyEvent机制(按键),keyevent机制按键
  • 2017-05-26仿拉手团购App8-- 更多模块,拉手团购app8--模块
  • 2017-05-26Android pulltorefresh使用,androidpulltorefresh
  • 2017-05-222.3.4 ImageView(图像视图)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 安卓开发之RecyclerView,安卓recyclerview
    • androd 获得wifi列表,androdwifi列表
    • A DB2 Performance Tuning Roadmap --LOG INTRODUCTION
    • Android网络编程(一)HTTP协议原理
    • Play 2D games on Nexus 6P running Android N7.1.1 with Daydream View VR headset,n7.1.1headset
    • Android深入四大组件(四)广播的注册、发送和接收过程
    • Android安卓破解之逆向分析SO常用的IDA分析技巧
    • 仿微信底部TAG完美渐变,tag渐变
    • Android开发学习——高德地图的实现,android高德
    • GreenDao 数据库:使用Raw文件夹下的数据库文件以及数据库升级,greendaoraw

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有