Android學習筆記(十一)BroadcastReceiver動態註冊、登出樣本

來源:互聯網
上載者:User

標籤:

  在上一篇博文中簡單介紹了一下BroadcastReceiver的相關知識點,本篇舉一個在代碼中動態註冊、登出BroadcastReceiver的栗子。

1、首先建立一個MyReceiver並繼承BroadcastReceiver,既然要動態註冊該receiver的話,就無需在AndroidManifest.xml中配置它了:

 1 public class MyReceiver extends BroadcastReceiver { 2     public static final String ACTION = "com.codingblock.receive.intent.action.MyReceiver"; 3  4     public MyReceiver() { 5          6     } 7  8     @Override 9     public void onReceive(Context context, Intent intent) {10         System.out.println("接收到的訊息為:" + intent.getStringExtra("data"));11     }12 }

程式碼分析:上面代碼中定義了一個靜態變數ACTION,以方便程式指定該receiver。另外,從onReceive()方法的第二個參數intent可以擷取到傳遞過來的資料。

2、布局檔案如下,很簡單,只有三個按鈕:發送訊息按鈕、註冊receiver按鈕和登出receiver按鈕。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <Button        android:id="@+id/btn_send_receiver"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="發送訊息" />        <Button        android:id="@+id/btn_register_receiver"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="註冊receiver" />        <Button        android:id="@+id/btn_unregister_receiver"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="登出receiver" /></LinearLayout>

3、最後在MainActivity中測試一下

 1 public class MainActivity extends Activity implements OnClickListener { 2     private MyReceiver receiver = null; 3     @Override 4     protected void onCreate(Bundle savedInstanceState) { 5         super.onCreate(savedInstanceState); 6         setContentView(R.layout.activity_main); 7         findViewById(R.id.btn_send_receiver).setOnClickListener(this); 8         findViewById(R.id.btn_register_receiver).setOnClickListener(this); 9         findViewById(R.id.btn_unregister_receiver).setOnClickListener(this);10     }11 12     @Override13     public void onClick(View v) {14         switch (v.getId()) {15         case R.id.btn_send_receiver:16             Intent i = new Intent(MyReceiver.ACTION);17             i.putExtra("data", "來自MainActivity的訊息");18             sendBroadcast(i);19             break;20         case R.id.btn_register_receiver:21             if (receiver == null) {22                 System.out.println("註冊receiver");23                 receiver = new MyReceiver();24                 registerReceiver(receiver, new IntentFilter(MyReceiver.ACTION));25             }26             break;27         case R.id.btn_unregister_receiver:28             if (receiver != null) {29                 System.out.println("登出receiver");30                 unregisterReceiver(receiver);31                 receiver = null;32             }33             break;34 35         default:36             break;37         }38     }39 }

程式碼分析:本段代碼在23行,通過registerReceiver()方法動態註冊了MyReceiver,並且使用過後最好不要忘了用unregisterReceiver()方法再將其登出,登出後應將receiver設為null。

4、運行結果如下

測試就會發現在點擊發送訊息按鈕之前,如果沒有註冊receiver的話是不能成功發送訊息的,只有註冊了receiver,點擊發送訊息log中才有輸出:

從日誌輸出就能看出,當註冊好了receiver後,按下發送訊息按鈕,在MyReceiver中就能收到來自MainActivity的訊息。

 

Android學習筆記(十一)BroadcastReceiver動態註冊、登出樣本

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.