• Android连载23-跨程序广播、有序广播


    一、跨程序发送广播

    • 广播是一种可以跨进程的通信方式;
    • 我们来写一个发送有序广播的项目
    • 首先先建立一个BroadcastTest3项目
    • 然后写一个接收广播的类,继承自BroadcastReceiver
    package com.example.broadcasttest3;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.widget.Toast;
    
    public class AnotherBroadcastReceiver extends BroadcastReceiver {
     @Override
     public void onReceive(Context context,Intent intend) {
      Toast.makeText(context, "receive in AnotherBroadcastReceiver",Toast.LENGTH_SHORT).show();
     }
    }
    • 然后在AndroidManifest.xml文件中注册该类
        <application
        ...................省略代码...................
            <receiver android:name=".AnotherBroadcastReceiver">
                <intent-filter>
                    <action android:name="com.example.broadcasttest.MY_BROADCAST" />
                </intent-filter>
            </receiver>
        </application>
    • 可以看到该类接受的是com.example.broadcasttest.MY_BROADCAST的广播
    • 接下来我们安装好这个项目2
    • 我们回到项目1,点击send broadcast按钮,会出现
      23.1
    • 然后紧接着会出现另一个项目的提示
      23.2
    • 这就证明了我们应用程序发出的广播是可以被其他程序所接收到的。

    注意:com.example.broadcasttest.MY_BROADCAST的广播已经在第一个项目的Androidmanifest.xml文件中定义好了。

    二、发送有序广播

    • 我们聚焦回项目1
    • 接下来我们发送有序广播,首先先修改触发广播的方法,在MainActivity.java
    //将sendBroadcast(intent);修改为如下有序广播的方法
    sendOrderedBroadcast(intent,null);
    • 该方法首先传入intent,第二个参数是与权限相关的字符串,这里传入null即可
    • 然后给我们的项目1的AndroidManifest.xml中文件添加优先级,代表项目1,在项目2之前获得该广播
            <receiver android:name=".MyBroadcastReceiver">
                <intent-filter android:priority="100">
                    <action android:name="com.example.broadcasttest.MY_BROADCAST"/>
                </intent-filter>
            </receiver>
    • 其实添加了一个属性而已android:priority="100"
    • 当然这个项目1,也可以截断这个广播不让它继续传播,修改接收类MyBroadcastReceiver
     public void onReceive(Context context,Intent intent) {
      Toast.makeText(context, "received in MyBroadcastReceiver", Toast.LENGTH_SHORT).show();
      abortBroadcast();
     }
    • 也就是多加了一个截断方法而已

    三、使用本地广播

    • 我们上面介绍的都是全局广播,所有程序都可以接收,所以会有安全性问题,同时也容易形成垃圾广播
    • android给我们提供了只在本程序里发送接收的广播,使用LocalBroadcastManager来管理
    • 我们下次连载再进行修改代码。

    四、源码:

  • 相关阅读:
    Java中BigDecimal的8种舍入模式
    Spring 4.3.2下实现http多次断点下载
    java文件同步性能测试
    JavaMail发送邮件时判断发送结果1.5.x
    关于mysql备份说明
    jxl 2.6.12 与 jxl 2.3.0 稳定版性能比较
    select选择框内容左右移动添加删除栏(升级)
    JS 清除字符串数组中,重复元素
    Js 数据容量单位转换(kb,mb,gb,tb)
    fine-uploader 5.11.8 (最新版) 使用感受
  • 原文地址:https://www.cnblogs.com/ruigege0000/p/13258557.html
Copyright © 2020-2023  润新知