上篇已經介紹過了廣播的基本內容,這裏介紹自定義廣播。
發送標準廣播
首先我們需要新建一個廣播接收者:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
String s = intent.getStringExtra("key");
Toast.makeText(context, "receive in MyBroadcastReceiver:" + s, Toast.LENGTH_SHORT).show();
}
}
修改清單文件:
<receiver
android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.example.mybroadcastreceiver2.MyBroadcastReceiver.MyBroadcastReceiver"/>
</intent-filter>
</receiver>
啓動的時候是用到的action
發送廣播:
intent = new Intent("com.example.mybroadcastreceiver2.MyBroadcastReceiver.MyBroadcastReceiver");// <action android:name="com.example.broadcastreceiver.BootCompleteReceiver.MyBroadcastReceiver"/>
count = count + 1;
intent.putExtra("key", count + "");
sendBroadcast(intent);
以上是APP內部的廣播,還可以不同app之間的廣播傳遞。如下圖
在此基礎上還需要再建一個project
同樣新建一個廣播接收端:
public class AnotherBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
Toast.makeText(context,"received in AnotherBroadcastReceiver1",Toast.LENGTH_SHORT).show();
}
}
清單文件:
<receiver
android:name=".AnotherBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.example.mybroadcastreceiver2.MyBroadcastReceiver.MyBroadcastReceiver"/>
</intent-filter>
</receiver>
發送有序廣播
以上兩個還是標準廣播,如果變爲有序廣播需要吧sendBroadcast(intent);修改爲sendOrderedBroadcast(intent,null);可以通過優先級來控制誰先收到消息。:
爲了方便查看重新創建一個廣播接收者:
public class MyBroadcastReceiver1 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
String s = intent.getStringExtra("key");
Toast.makeText(context, "receive in MyBroadcastReceiver1:" + s, Toast.LENGTH_SHORT).show();
}
}
清單文件:
<receiver
android:name=".MyBroadcastReceiver1"
android:enabled="true"
android:exported="true">
<intent-filter
android:priority="1">
<action android:name="com.example.mybroadcastreceiver2.MyBroadcastReceiver.MyBroadcastReceiver1"/>
</intent-filter>
</receiver>
發送廣播:
Button button1 = findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
intent = new Intent("com.example.mybroadcastreceiver2.MyBroadcastReceiver.MyBroadcastReceiver1");// <action android:name="com.example.broadcastreceiver.BootCompleteReceiver.MyBroadcastReceiver"/>
count = count + 1;
intent.putExtra("key", count + "");
sendOrderedBroadcast(intent, null);
}
});
另一個project:的廣播接收
public class AnotherBroadcastReceiver1 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
Toast.makeText(context, "received in AnotherBroadcastReceiver2", Toast.LENGTH_SHORT).show();
abortBroadcast();
}
}
對應的清單文件:
<receiver
android:name=".AnotherBroadcastReceiver1"
android:enabled="true"
android:exported="true">
<intent-filter
android:priority="2">
<action android:name="com.example.mybroadcastreceiver2.MyBroadcastReceiver.MyBroadcastReceiver1"/>
</intent-filter>
</receiver>
通過 android:priority=""來判斷優先級範圍是-1000到1000整形的值越大優先級越高。
轉發表明出處:https://blog.csdn.net/qq_35698774/article/details/106573979
android互助羣:
感謝:郭霖的《第一行代碼 第二版》