說說在 Android 中如何發送自定義廣播

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() 方法,就可以截斷這條廣播啦。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,556評論 25 708
  • 【Android 廣播】 BroadcastReceiver簡介 BroadcastReceiver(廣播接收器)...
    Rtia閱讀 3,472評論 1 17
  • 現在你已經學會了通過廣播接收器來接受系統廣播,接下來我們就要學習一下如何在應用程序中發送自定義廣播。前面已經介紹過...
    AndYMJ閱讀 3,421評論 4 0
  • 案例最后效果: 廣播的類型: 標準廣播 標準廣播是完全異步的廣播, 也就是當廣播發出之后, 所有的廣播接收器機會都...
    史慧君閱讀 3,191評論 2 50
  • 日漸衰老的母親 生下星辰和燈盞 疼痛的母親,善良的母親 你的花朵盛開,盛大的支離破碎的美 ——是你用足夠的愛和耐心...
    憂傷沒有傷口閱讀 251評論 0 2