1 發送標準廣播
先新建一個廣播接收器用于來接收自定義的廣播:
public class MyReceiver extends BroadcastReceiver {
public MyReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"接收到自定義的廣播",Toast.LENGTH_SHORT).show();
}
}
然后修改 AndroidManifest.xml 文件,注冊要監聽的自定義廣播(假設是 net.deniro.android.MY_BROADCAST):
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="net.deniro.android.MY_BROADCAST"/>
</intent-filter>
</receiver>
接著在主布局文件中,添加一個按鈕作為發送廣播的觸發點:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="net.deniro.android.mybroadcastreceiver.MainActivity">
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="發送廣播"></Button>
</RelativeLayout>
最后修改主活動的代碼:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendBroadcast(new Intent("net.deniro.android.MY_BROADCAST"));
}
});
}
}
這里通過 sendBroadcast() 方法來發送廣播,這樣所有監聽這個廣播的接收器就會收到消息。
接收到自定義廣播
2 發送有序廣播
廣播是一種可以跨進程進行通信的方式,因此我們在應用程序中發出的廣播,其他的應用程序也可以收到。
我們新建一個項目,然后再自定義一個廣播接收器:
public class AnotherReceiver extends BroadcastReceiver {
public AnotherReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"接收到自定義的廣播(AnotherReceiver)",Toast.LENGTH_SHORT).show();
}
}
代碼與之前的接收器代碼類似,只是彈出的消息內容不同。
接著在 AndroidManifest.xml 文件中為接收器注冊要監聽的消息:
<receiver
android:name=".AnotherReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="net.deniro.android.MY_BROADCAST" />
</intent-filter>
</receiver>
最后把這個項目安裝到模擬器上,然后重新回到上一個項目 app,點擊【發送廣播】按鈕,這時就會彈兩次提示信息。
新的程序接收到廣播消息
現在我們試試發送有序廣播。 回到前面的項目,修改 Activity 中的代碼:
sendOrderedBroadcast((new Intent("net.deniro.android.MY_BROADCAST")),null);
sendOrderedBroadcast() 方法接收兩個參數,第一個是 Intent,第二個是與權限相關的字符串,這里我們傳入 null。
通過 AndroidManifest.xml 文件中的 android:priority
,可以設定廣播接收器的先后順序,我們為第一個接收器設定 android:priority
:
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="100">
<action android:name="net.deniro.android.MY_BROADCAST" />
</intent-filter>
</receiver>
android:priority 的值越大,優先級就越高。
調用 abortBroadcast() 方法,就可以截斷這條廣播啦。