【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();//截斷廣播
    }
}

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