【Android】自定义广播和有序广播、截断广播

一、自定义广播

1、继承于广播接收器

新建一个类,继承于BroadcastReceiver,并且重写onReceive()方法,在此方法里实现自己的业务逻辑

public class MyBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e("MyBroadcastReceiver", "onReceive: 接收到自定义广播");
    }
}

2、AndroidManifest注册

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ice.androidpractice20_orderedbroadcast">

    <application
       ......
        <receiver
            android:name=".MyBroadcastReceiver" //注意类名
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.ice.android.MYBROADCAST"/>  //自定义一个广播名字,方便调用
            </intent-filter>
        </receiver>

        <activity android:name=".MainActivity">
         ......
        </activity>
    </application>

</manifest>

3、发送自定义的广播

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
		//这里传入AndroidManifest自定义的action名
        Intent intent = new Intent("com.ice.android.MYBROADCAST");
        sendBroadcast(intent);//发送广播
    }
}

此时运行程序,应该就能收到自定义的广播了

二、有序广播

上面的自定义广播发送的仍是标准广播,是无序的,而有序广播是按优先级传播的,可以随时被截断。在上面的代码基础上我们将其修改成有序广播

1、设置优先级

打开AndroidManifest修改,在<intent-filter>标签添加一个priority并属性设置一个值,取值范围是-1000~10000,值越大的广播接收器(包括其他独立APP)越先接收到

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ice.androidpractice20_orderedbroadcast">

    <application
        ......
        <receiver
            android:name=".MyBroadcastReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="100">	//设置优先级-1000~10000,值越大越先接收
                <action android:name="com.ice.android.MYBROADCAST"/>
            </intent-filter>
        </receiver>

        <activity android:name=".MainActivity">
		.......
        </activity>
    </application>

</manifest>

2、发送广播

其实就是将sendBroadcast()改为sendOrderedBroadcast()就行

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//        //发送自定义的标准广播
//        Intent intent = new Intent("com.ice.android.MYBROADCAST");
//        sendBroadcast(intent);

        //发送自定义的有序广播
        Intent intent = new Intent("com.ice.android.MYBROADCAST");
        sendOrderedBroadcast(intent,null);//第二个参数是receivePermission
    }
}

3、截断广播

当一个接收器接收到该有序广播,若不想让广播继续传送,可以将其截断

public class MyBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e("MyBroadcastReceiver", "onReceive: 接收到自定义广播");
        abortBroadcast();//截断广播
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章