一、自定義廣播
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();//截斷廣播
}
}