在上篇博文中点击打开链接,我们简单介绍了Android中无序广播的实现,那么在本篇博文中,我们将重点介绍的是有序广播的实现。
所谓的有序广播就是:应用按照一定的顺序接受广播,该顺序是根据权限值定义的,权限值越大则最先获取广播,权限值小的则后获取广播。
有序广播可以拦截,如果发生拦截,则之后无法继续传递广播。
我们发送有序广播使用的是:sendBroadcast(intent);
而我们发送有序广播使用的是:sendOrderedBroadcast(intent, null);
其中我们还需在过滤其中设置接受信息的优先级,使用的方法是: android:priority="450"设置接受有序广播的优先级 ,数值越大,优先级越高,则最先收到广播
好了,说了这么多我们看一下具体的代码实现吧。
一、首先是在本应用中接受广播的信息。
首先是在MainActivity定义广播发送者:同样我们需要设置发送广播的Intent的Action
package com.example.text04; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.content.IntentFilter; import android.view.Menu; import android.view.View; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 这里同样可以静态注册广播并设置优先级 // IntentFilter filter = new IntentFilter(); // filter.addAction("MyInfo02"); // filter.setPriority(400); // registerReceiver(new MyReceiver02(), filter); } public void send(View view) { // 创建Intent对象 Intent intent = new Intent(); intent.putExtra("info", "最近过的好吗?"); intent.putExtra("num", 100); intent.setAction("MyInfo02"); // 发送广播 sendOrderedBroadcast(intent, null); } }然后是在本应用中创建BroadCastReceiver的两个子类实现广播的接受:同样是先判断该Intent的Action是否和我们发送广播时设置的Action一致。
第一个子类:
package com.example.text04; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("MyInfo02")) { String info = intent.getStringExtra("info"); int num = intent.getIntExtra("num", 88); //Log输出 Log.i("main", "01收到的信息:" + info + " 数值是:" + num); } } }
第二个子类:
package com.example.text04; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; public class MyReceiver02 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("MyInfo02")) { String info = intent.getStringExtra("info"); int num = intent.getIntExtra("num", 88); // Log输出 Log.i("main", "02收到的信息:" + info + " 数值是:" + num); } } }然后是在清单文件中加上Receiver的过滤器:这里我们使用android:proiority设置两个接受器的权限值,越大的越先接受到信息。
<receiver android:name="com.example.text04.MyReceiver" > <intent-filter android:priority="500" > <action android:name="MyInfo02" /> </intent-filter> </receiver> <receiver android:name="com.example.text04.MyReceiver02" > <intent-filter android:priority="400" > <action android:name="MyInfo02" /> </intent-filter> </receiver>二、以上就是在本应用中接受自定义的有序广播,接下来我们看一下在其他应用中如何接受广播的信息。
同样我们创建一个新的Android工程,然后新建一个BroadCastReceiver的子类进行信息的接受:同样是判断Action
package com.example.text05; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("MyInfo02")) { String info = intent.getStringExtra("info"); int num = intent.getIntExtra("num", 88); // Log输出 Log.i("main", "other收到的信息:" + info + " 数值是:" + num); } } }然后是在清单文件中设置过滤器并配置该接收器的优先级:这里同样进行优先级的设定
<!-- android:priority="450"是设置接受有序广播的优先级 数值越大,优先级越高,则最先收到广播 --> <receiver android:name="com.example.text05.MyReceiver" > <intent-filter android:priority="450" > <action android:name="MyInfo02" /> </intent-filter> </receiver>好了,定义了优先级后,我们接受广播就有了一定的顺序,这就是有序广播的所有内容。我们唯一要注意的一点就是它和无序广播的两个区别,
就是发送广播的方法不同,还有就是有序广播需要定义优先级以确定接收器接受广播的顺序。