總網頁瀏覽量

關於我自己

我的相片
人生的必修課是接受無常,人生的選修課是放下執著。

2014年7月1日 星期二

為自己的AP增加發/收BroadcastReceiver事件







一陣子沒碰還是會忘記 BroadcastReceiver 怎麼做, 今天又重新整理了一下

首先在要接收封包事件的class新增一個class
在此範例中是寫在主程式(extends Activity)
public class BroadcastReceiver_customize extends BroadcastReceiver {

        //定義封包來源

        static final String PieFee_ACTION = "com.tsots.PieFee";

        @Override

        public void onReceive(Context context, Intent intent) {

            //若封包符合PieFee_ACTION內的值就接收下來

            if (intent.getAction().equals(PieFee_ACTION)) {

                Bundle bundle_from = intent.getExtras();

                if (bundle_from != null){

                    //解析封包內的"FROM"值

                    from = bundle_from.getString("FROM");

                    if(from.equals("prizeexchanged")){

                        //這裡是接收到Broadcast後要做的事

                    }

                }

            }                                   

        }

    } 


在主程式(extends Activity) 的onResume()中增加
@Override

    protected void onResume() {

        super.onResume();

        //註冊一個Filter

        IntentFilter mFilter = new IntentFilter(BroadcastReceiver_customize.PieFee_ACTION);

        BroadcastReceiver_customize BRC = new BroadcastReceiver_customize();

        registerReceiver(BRC, mFilter);

    } 


再來決定發送端
在此範例中是寫在一個extends BaseAdapter的class裡
//會將封包以 "com.tsots.PieFee"的名義發送

Intent intent = new Intent("com.tsots.PieFee");

Bundle bundle_br_prize = new Bundle();

//在其內打包一個值作為識別

bundle_br_prize.putString("FROM", "prizeexchanged");

intent.putExtras(bundle_br_prize); 

//因為此class非extends Activity, 故加context(呼叫此class時會傳入context的值)

context.sendBroadcast(intent);


沒有留言:

張貼留言