《第一行代碼Android》(第2版)——發送標準廣播不成功

在《第一行代碼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()函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章