廣播分為有序廣播和無序廣播
- 有序廣播
所有與廣播中的action匹配的廣播接收者都可以收到這條廣播,但是是有先后順序的,按照廣播接收者的優(yōu)先級排序.
- 無序廣播
所有與廣播中的action匹配的廣播接收者都可以收到這條廣播,并且是沒有先后順序的,視為同時收到
有序廣播
- sendOrderedBroadcast發(fā)送
- 可以添加最終廣播接收者,最終廣播接收者resultReceiver:不需要在清單文件中配置,這個廣播接收者只接收該條有序廣播,并且是最后一個收到該廣播,并且一定可以接收到,即便被攔截
發(fā)出廣播
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void click(View v) {
Intent intent = new Intent();
intent.setAction("orderlyBroadcast");
//發(fā)送有序廣播
//sendOrderedBroadcast(intent, null, null, null, 0, "每人發(fā)100W", null);
//最終廣播接收者resultReceiver:不需要在清單文件中配置,這個廣播接收者只接收該條有序廣播,并且是最后一個收到該廣播,并且一定可以接收到,即便被攔截
sendOrderedBroadcast(intent, null, new MyResultReceiver(), null, 0, "每人發(fā)100W", null);
}
class MyResultReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String str = getResultData();
System.out.println("最終結(jié)果:" + str);
}
}
}
接收者
- 優(yōu)先級 android:priority="300" 范圍-1000 至 1000 1000為最高
- 阻止廣播 abortBroadcast(),對于最終接收者來說,無效.
<receiver
android:name=".LevelOneReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="1000">
<action android:name="orderlyBroadcast"></action>
</intent-filter>
</receiver>
<receiver
android:name=".LevelTwoReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="600">
<action android:name="orderlyBroadcast"></action>
</intent-filter>
</receiver>
<receiver
android:name=".LevelThreeReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="300">
<action android:name="orderlyBroadcast"></action>
</intent-filter>
</receiver>
public class LevelOneReceiver extends BroadcastReceiver {
public LevelOneReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
String str = getResultData().toString();
System.out.println("LEVEL ONE:" + str);
//修改廣播內(nèi)容
setResultData("每人發(fā)80W");
}
}
public class LevelTwoReceiver extends BroadcastReceiver {
public LevelTwoReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
String str = getResultData().toString();
System.out.println("LEVEL TWO:" + str);
//阻止廣播后,優(yōu)先級低的則收不到了,但最終廣播接收者一定會收到.
abortBroadcast();
}
}
public class LevelThreeReceiver extends BroadcastReceiver {
public LevelThreeReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
String str = getResultData().toString();
System.out.println("LEVEL THREE:" + str);
}
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。