在《第一行代碼Android》(第2版)的書中179頁關於發送標準廣播的代碼如下:
Button button=(Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent("com.gmn.broadcasttest.MY_BROADCAST");
sendBroadcast(intent);
}
});
但是按照書中的代碼實現之後,運行程序,點擊按鈕卻沒有成功接收到廣播。這是因爲在 Android 8.0 之後,對於廣播的發送與接收變嚴格了,需要加入Component參數。 Android 8.0 之後的實現代碼如下:
Button button=(Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent("com.gmn.broadcasttest.MY_BROADCAST");
intent.setComponent(new ComponentName("com.gmn.broadcasttest",
"com.gmn.broadcasttest.MyBroadcastReceiver"));
sendBroadcast(intent);
}
});
加入了setComponent()函數,setComponent()函數的第一個參數爲MyBroadcastReceiver這個廣播接收器的包路徑名"com.gmn.broadcasttest",第二個參數爲MyBroadcastReceiver廣播接收器的類路徑名"com.gmn.broadcasttest.MyBroadcastReceiver"。
注意事項:
1、只有接收的是自定義廣播且爲靜態註冊的廣播接收器,才需要添加setComponent()函數。
2、接收的是自定義廣播但爲動態註冊的廣播接收器,則不需要添加setComponent()函數,如《第一行代碼Adroid》(第2版)書中的第189頁所示,不用添加setComponent()函數。