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来管理
  • 我们下次连载再进行修改代码。

四、源码:

原文地址:https://www.cnblogs.com/ruigege0000/p/13258557.html