發送自定義廣播

一、發送標準廣播


Intent intent = new Intent("com.example.broadcasttest. MY_BROADCAST");
sendBroadcast(intent);

二、發送有序廣播


Intent intent = new Intent("com.example.broadcasttest. MY_BROADCAST");
sendOrderedBroadcast(intent, null);
截斷廣播:
public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "received in MyBroadcastReceive", Toast.LENGTH_SHORT).show();
        abortBroadcast();
    }
}
abortBroadcast();
  • 截斷后,后續的接收器就不會接收到廣播了。
  • 接收廣播的先后順序:優先級 android:priority:
<receiver android:name=".MyBroadcastReceiver">
    <intent-filter android:priority="100" >
        <action android:name="com.example.broadcasttest.MY_BROADCAST"/>
    </intent-filter>
</receiver>

三、本地廣播


  • 前面我們發送和接收的廣播全部都是屬于系統全局廣播,即發出的廣播可以被其他任何的任何應用程序接收到,并且我們也可以接收來自于其他任何應用程序的廣播。這樣就很容易會引起安全性的問題。
  • Android 本地廣播機制,使用這個機制發出的廣播只能夠在應用程序的內部進行傳遞,并且廣播接收器也只能接收來自本應用程序發出的廣播,這樣所有的安全性問題就都不存在了。
  • 本地廣播是無法通過靜態注冊的方式來接收的。因為要用時程序肯定已經啟動了。
public class MainActivity extends Activity {
    private IntentFilter intentFilter;
    private LocalReceiver localReceiver;
    private LocalBroadcastManager localBroadcastManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        localBroadcastManager = LocalBroadcastManager.getInstance(this);  // 獲取實例

        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                
                Intent intent = new Intent("com.example.broadcasttest. LOCAL_BROADCAST");
                localBroadcastManager.sendBroadcast(intent); // 發送本地廣播

            }
        });

        intentFilter = new IntentFilter();
        intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST");
        localReceiver = new LocalReceiver();
        localBroadcastManager.registerReceiver(localReceiver, intentFilter); // 注冊本地廣播監聽器
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        localBroadcastManager.unregisterReceiver(localReceiver);
    }

    class LocalReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "received local broadcast", Toast.LENGTH_SHORT).show();
        }
    }
}
localBroadcastManager = LocalBroadcastManager.getInstance(this); // 獲取實例
Intent intent = new Intent("com.example.broadcasttest. LOCAL_BROADCAST");
localBroadcastManager.sendBroadcast(intent); // 發送本地廣播
localBroadcastManager.unregisterReceiver(localReceiver);
intentFilter = new IntentFilter(); 
intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST"); 
localReceiver = new LocalReceiver(); 
localBroadcastManager.registerReceiver(localReceiver, intentFilter); // 注冊本地廣播監聽器
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容