Android学习-5(广播Broadcast)

学习基于《第一行代码》第五章(郭霖)

一、广播简介

Broadcast Receiver为Android四大组件之一。
主要可以分为两种类型 标准广播有序广播

  • 标准广播
    是一种异步的方式来进行传播的,广播发出去之后,所有的广播接收者几乎是同一时间收到消息的。他们之间没有先后顺序可言,而且这种广播是没法被截断的。
  • 有序广播 是一种同步执行的广播,在广播发出去之后,同一时刻只有一个广播接收器可以收到消息。当广播中的逻辑执行完成后,广播才会继续传播。

二、接受系统广播

动态注册

  1. 实现一个广播接收器

    	public class MyBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "received in MyBroadcastReceiver", Toast.LENGTH_SHORT).show();
            abortBroadcast();
        }
    }
    
  2. 进行动态注册

    intentFilter = new IntentFilter();																		
    intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
    myBroadcastReceiver = new MyBroadcastReceiver();
    registerReceiver(myBroadcastReceiver, intentFilter);
    

静态注册

还是用上面的MyBroadcastReceiver(可以将其分出到一个新类中),并在manifest文件中增加如下的代码:

<receiver
    android:name=".MyBroadcastReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>

几个相关解释:

android:exported

此BroadcastReceiver能否接收其他App发出的广播(其默认值是由receiver中有无intent-filter决定的,如果有intent-filter,默认值为true,否则为false);

android:name

此broadcastReceiver类名;

android:permission

如果设置,具有相应权限的广播发送方发送的广播才能被此broadcastReceiver所接收;

android:process

broadcastReceiver运行所处的进程。默认为App的进程。可以指定独立的进程(Android四大组件都可以通过此属性指定自己的独立进程);

三、发送自定义广播

发送标准广播

Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");
sendBroadcast(intent);		//这里Intent中的值需要与Broadcast Receiver中添加的action一致,receiver才能收的到

发送有序广播

其实就是改成sendOrderedBroadcast(intent,null); 第二个参数是一个与权限相关的字符串,传入null就行了
这里提一下接受方
需要加上priority属性,该值越大,优先级越高

<receiver android:name=".MyBroadcastReceiver">
    <intent-filter android:priority="100" >
     <action android:name="com.example.broadcasttest.MY_BROADCAST"/>
    </intent-filter>
   </receiver>

如果在onReceiver()方法中调用了abortBroadcast()方法,就表示将这条广播截断。

四、使用本地广播

以上的都属于系统全局广播,即发出的广播可以被其他任何应用程序接收到
为了能够简单地解决广播安全性的问题,Android引入了一套本地广播机制

  • 发送:

        LocalBroadcastManager localBroadcastManager;
    	localBroadcastManager = LocalBroadcastManager .getInstance(this);	//获取实例
    	Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");
    	localBroadcastManager.sendBroadcast(intent);	//发送本地广播
    
  • 获取:

    LocalReceiver localReceiver;
    intentFilter = new IntentFilter();
    intentFilter.addAction("com.example.broadcasttest.MY_BROADCAST");
    localReceiver = new LocalReceiver();
    localBroadcastManager.registerReceiver(localReceiver,intentFilter);
    

猜你喜欢

转载自blog.csdn.net/qq_39830579/article/details/86624835