发送有序广播

来源:互联网 发布:海洋 知乎 编辑:程序博客网 时间:2024/05/21 06:20

首先编写用户交互页面:

<?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="com.example.bz0209.youxuguangbo.MainActivity">    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerHorizontal="true"        android:layout_marginTop="80dp"        android:onClick="send"        android:text="发送有序广播"        android:paddingRight="5dp"        android:paddingLeft="5dp"        android:background="#FBFBFF"        android:textSize="20sp"/></RelativeLayout>

界面设置如图:这里写图片描述

定义广播类型并发送广播:

package com.example.bz0209.youxuguangbo;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);    }}

创建三个广播接收者,分别为:MyBroadReceiverOne、MyBroadReceiverTwo、MyBroadReceiverThree:

编写MyBroadReceiverOne代码:package com.example.bz0209.youxuguangbo;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;public class MyBroadReceiverOne extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        Log.i("MyBroadReceiverOne","自定义的广播接收者One,接受到了广播事件");    }}

MyBroadReceiverTwo的代码:

package com.example.bz0209.youxuguangbo;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;public class MyBroadReceiverTwo extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        Log.i("MyBroadReceiverTwo","自定义的广播接收者Two,接受到了广播事件");    }}

MyBroadReceiverThree的代码:

package com.example.bz0209.youxuguangbo;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;public class MyBroadReceiverThree extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        Log.i("MyBroadReceiverThree","自定义的广播接收者Three,接受到了广播事件");    }}

还需要在清单文件里面注册广播接收者,将三个广播接收者的优先级分别设置为1000、200和600:

<?xml version="1.0" encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"package="com.example.bz0209.youxuguangbo"><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=".MyBroadReceiverOne">        <intent-filter android:priority="1000">            <action android:name="Intercept_Stitch"/>        </intent-filter>    </receiver>    <receiver android:name=".MyBroadReceiverTwo">        <intent-filter android:priority="200">            <action android:name="Intercept_Stitch"/>        </intent-filter>    </receiver>    <receiver android:name=".MyBroadReceiverThree">        <intent-filter android:priority="600">            <action android:name="Intercept_Stitch"/>        </intent-filter>    </receiver></application></manifest>

运行模拟器,点击“发送有序广播”,发出一条广播事件,观察LogCat窗口下的提示信息发现日志输出是按照三个广播接收者的优先级依次数出的,结果如图:
这里写图片描述

将广播接收者2的优先级改为1000,并在广播接收者1之前注册,代码:

<?xml version="1.0" encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"package="com.example.bz0209.youxuguangbo"><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=".MyBroadReceiverTwo">    <intent-filter android:priority="1000">        <action android:name="Intercept_Stitch"/>    </intent-filter>    </receiver>    <receiver android:name=".MyBroadReceiverOne">        <intent-filter android:priority="1000">            <action android:name="Intercept_Stitch"/>        </intent-filter>    </receiver>    <receiver android:name=".MyBroadReceiverThree">        <intent-filter android:priority="600">            <action android:name="Intercept_Stitch"/>        </intent-filter>    </receiver></application></manifest>

运行发现有错:
这里写图片描述

继续修改MyBroadReceiverTwo,代码如下:

package com.example.bz0209.youxuguangbo;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;public class MyBroadReceiverTwo extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        Log.i("MyBroadReceiverTwo","自定义的广播接收者Two,接受到了广播事件");        abortBroadcast();        Log.i("MyBroadcastReceiverTwo","我是广播接收者Two,广播被我终结了");    }}

运行结果如图:
这里写图片描述

原创粉丝点击