广播接收者--有序广播
来源:互联网 发布:诲汝知之乎古诗文 编辑:程序博客网 时间:2024/05/16 12:38
界面图:
1.创建一个OrderBroadcastReceiver的项目,编写布局activity_main.xml文件,代码如下:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/stitch_one" tools:context="bzu.edu.cn.orderbroadcastreceiver.MainActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:text="发送有序广播" android:background="#ffffff" android:layout_marginTop="80dp" android:onClick="send"/></RelativeLayout>
2.点击Button按钮时就会发送一条有序广播,MainAcivity代码如下:
package bzu.edu.cn.orderbroadcastreceiver;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void send(View view){ Intent intent=new Intent(); //定义广播的事件类型 intent.setAction("Intercept_Stitch"); //发送广播 sendOrderedBroadcast(intent,null); }}
上述代码中,sendOrderedBroadcast(intent,null)用于发送一个有序广播,在该方法中接收两个参数,第一个参数是指定的意图,设置要发送的广播事件。第二个参数制定接受者的权限,如果不想让所有的接受者都看到,可以显示的指定接受者的权限,目前不关心权限可以将其指定为null。
3.点中app文件夹击右键->new->Other->BroadcastReceiver创建广播
MyReceiverOne代码如下:
package bzu.edu.cn.orderbroadcastreceiver;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;public class MyReceiverOne extends BroadcastReceiver { public MyReceiverOne() { } @Override public void onReceive(Context context, Intent intent) { // TODO: This method is called when the BroadcastReceiver is receiving // an Intent broadcast. Log.i("MyReceiverOne","自定义的广播接受者One,接受到了广播事件"); }}
MyReceiverTwo代码如下:
package bzu.edu.cn.orderbroadcastreceiver;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;public class MyReceiverTwo extends BroadcastReceiver { public MyReceiverTwo() { } @Override public void onReceive(Context context, Intent intent) { // TODO: This method is called when the BroadcastReceiver is receiving // an Intent broadcast. Log.i("MyReceiverTwo","自定义的广播接受者Two,接受到了广播事件"); }}
MyReceiverThree代码如下:
package bzu.edu.cn.orderbroadcastreceiver;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;public class MyReceiverThree extends BroadcastReceiver { public MyReceiverThree() { } @Override public void onReceive(Context context, Intent intent) { // TODO: This method is called when the BroadcastReceiver is receiving // an Intent broadcast. Log.i("MyReceiverThree","自定义的广播接受者Three,接受到了广播事件"); }}
4.在配置文件里配置广播,AndroidManifest.xml代码如下:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="bzu.edu.cn.orderbroadcastreceiver"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".MyReceiverOne" android:enabled="true" android:exported="true"> <intent-filter android:priority="1000"> <action android:name="Intercept_Stitch"/> </intent-filter> </receiver> <receiver android:name=".MyReceiverTwo" android:enabled="true" android:exported="true"> <intent-filter android:priority="200"> <action android:name="Intercept_Stitch"/> </intent-filter> </receiver> <receiver android:name=".MyReceiverThree" android:enabled="true" android:exported="true"> <intent-filter android:priority="600"> <action android:name="Intercept_Stitch"/> </intent-filter> </receiver> </application></manifest>
5.点击“发送有序广播”按钮运行程序后,LogCat窗口下的提示信息如下:
出现这样的输出结果是因为给广播设置了优先级,android:priority=”1000”值越大优先级越高,优先级决定了广播接收的先后顺序。
6.若将广播接收者MyBroadcastReceiverTwo优先级同样设置为1000,并将MyBroadcastReceiverTwo注册在MyBroadcastReceiverOne前面,LogCat窗口下的提示信息如下:
注意观察,这时Two移到了One的上面,这说明优先级相同时,先注册的广播接收者会先接收到广播事件。
7.修改MyBroadcastReceiverTwo如下:
public void onReceive(Context context, Intent intent) { // TODO: This method is called when the BroadcastReceiver is receiving // an Intent broadcast. Log.i("MyReceiverTwo","自定义的广播接受者Two,接受到了广播事件"); abortBroadcast();//拦截有序广播 Log.i("MyReceiverTwo","我是广播接受者Two,广播被我终结了"); }
8.修改后运行得到的LogCat窗口下的提示信息如下:
我们可以看到广播被终结了,这说明高优先级的广播是可以被终结的,abortBroadcast()语句用于终止有序广播,当程序执行完这句代码后,广播事件将会被终结,不会向下传递。
- 广播接收者--有序广播
- 广播接收者-发送有序广播
- 广播接收者---发送有序广播
- 广播接收者之有序广播
- Android_07_有序广播及最终广播接收者
- Android-广播接收者:发送有序广播
- 广播接收者之发送有序广播
- Android--广播接收者(发送有序广播)
- Android 广播接收者练习-发送有序广播
- android,自定义广播,最终广播接收者,防止拦截广播,有序广播,无序广播
- android 学习笔记8-广播接收者 有序 无序广播 案例
- 广播接收者——案例:拦截有序广播
- 广播接收者
- 广播接收者
- 广播接收者
- 广播接收者
- 广播接收者
- 广播接收者
- pytorch-hook
- Replay the test case using KLEE
- js之基础篇三
- SpringSide实战(二)----运行SpringSide项目并导入到Eclipse中
- 比特币
- 广播接收者--有序广播
- 记录从指尖悄悄流逝的时间
- tensorflow基于GPU环境配置
- The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from required .class fi
- 最短路径
- AntShares 区块链搭建私有链与部署智能合约
- 大zz们的日常
- leetcode 524. Longest Word in Dictionary through Deleting (自定义sort排序cmp)
- 【BZOJ1146】网络管理,整体二分