2014年7月11日 星期五

BroadcastReceiver 解說版

BroadcastReceiver 解說版

infor from http://givemepass.blogspot.tw/2011/12/broadcastreceiver.html
通常廣播是用來通知系統,有某些系統資訊已經完成了,
廣播會流通在系統內,很多程式都會接收到廣播,
就很像學校裡會用廣播通知某某某到訓導處,
很多同學或老師都會聽到,但是會去訓導處的只有某某某。


首先定義一個Button,它是用來送出一個廣播訊息,
當接收廣播的程式收到以後,就會跳出一個視窗顯示我收到了。

package com.givemepass.broadcastrecevierdemo;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class BroadcastReceiverDemoActivity extends Activity {
  
 private final static String MY_MESSAGE = "com.givemepass.sendmessage";
 private Button send_broadcast;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        send_broadcast = (Button)findViewById(R.id.send_broadcast);
        send_broadcast.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View arg0) {
              
               registerReceiver(mBroadcast, new IntentFilter(MY_MESSAGE));
               Intent intent = new Intent();
               intent.setAction(MY_MESSAGE);
               sendBroadcast(intent);
            }
        });
    }
    private BroadcastReceiver mBroadcast =  new BroadcastReceiver() {
        private final static String MY_MESSAGE = "com.givemepass.sendmessage";
        
       @Override
        public void onReceive(Context mContext, Intent mIntent) {
           
            if(MY_MESSAGE.equals(mIntent.getAction())){
                new AlertDialog.Builder(BroadcastReceiverDemoActivity.this)
                .setMessage("收到訊息!")
                .setPositiveButton("確定", new DialogInterface.OnClickListener(){
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
              
                        unregisterReceiver(mBroadcast);
                    }
                })
                .show();
            }
        }
    };
}

當我們按下button的時候,


就對系統註冊我們下面所寫的廣播類別,

registerReceiver(mBroadcast, new IntentFilter(MY_MESSAGE));


這個廣播類別是專門接收傳送出來的各類訊息,


而我們篩選出MY_MESSAGE裡面的字串,
if(MY_MESSAGE.equals(mIntent.getAction())){
    ...
}




當我們截取到這樣的字串, 就會跳出一個視窗顯示我們收到了!


接著就將廣播的物件解除註冊。
new AlertDialog.Builder(BroadcastReceiverDemoActivity.this)
    .setMessage("收到訊息!")
    .setPositiveButton("確定", new DialogInterface.OnClickListener(){
        @Override
        public void onClick(DialogInterface dialog, int which) {
         // TODO Auto-generated method stub
         unregisterReceiver(mBroadcast);
     }
    })
    .show();

沒有留言:

張貼留言