【Android】廣播的寫法

  • 發送廣播html

    /**
     * 小喇叭發出數據已經跟新的廣播
     */
    private void broadcastCircleViewUpdate() {
        //建立 Intent
        Intent testIntent = new Intent();
        //設置 動做屬性
        testIntent.setAction(Action.ACTION_CIRCLE_MSG_UPDATE);
        //設置消息內容
        testIntent.putExtra("MSG", "Test!!!!");
        //發送廣播
        getBaseContext().sendBroadcast(testIntent);
    }

  • 接受廣播java

【1】先寫一個廣播監聽對象: receiver
android

private BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            //講廣播中收到的intent的屬性取出來
            String action = intent.getAction();
            //使用if-else if 進行哦匹配;注意不要使用switch
            if (action.equals(BroadCastAction.NEW_POST_ACTION)) {
                //添加須要執行的動做
                ...
                ...
            } else if (action.equals(BroadCastAction.NEW_POST_SUCCESS_ACTION)) {
                //添加須要執行的動做
                ...
                ...
            } else if (action.equals(BroadCastAction.NEW_POST_FAIL_ACTION)) {
                //添加須要執行的動做
                ...
                ...
            } else if (action.equals(Action.ACTION_CIRCLE_MSG_UPDATE)) {
                //添加須要執行的動做
                String msg = intent.getStringExtra("MSG");
                ...
                ...
            } else if (action.equals(Action.ACTION_CIRCLE_HOME_UPDATE)) {
                //添加須要執行的動做
                ...
                ...
            } else if (action.equals(Action.ACTION_CIRCLE_PERSONAL_UPDATE))
            {
                //添加須要執行的動做
                ...
                ...
            }
        }
    };


  【2】集中註冊全部的監聽
ide

  /**
     * 集中註冊監聽
     */
    private void registRecivers() {
        IntentFilter filter = new IntentFilter();
        filter.addAction(BroadCastAction.NEW_POST_ACTION);
        filter.addAction(BroadCastAction.NEW_POST_SUCCESS_ACTION);
        filter.addAction(BroadCastAction.NEW_POST_FAIL_ACTION);
        filter.addAction(Action.ACTION_CIRCLE_MSG_UPDATE);
        filter.addAction(Action.ACTION_CIRCLE_HOME_UPDATE);
        filter.addAction(Action.ACTION_CIRCLE_PERSONAL_UPDATE);
        //註冊走起:參數1爲receiver,參數2爲intent過濾器
        registerReceiver(receiver, filter);
    }


【3】廣播的註冊與卸載code

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_firend_circle);
        ... ...
        // 在Activity中onCreate()中集中註冊
        registRecivers();
}

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 注意必定要卸載,否則運行會報錯
        unregisterReceiver(receiver);
    }


好東西老是在最後!!!xml

BroadcastReciver須要能匹配的intent,共有2種方式htm

【1】使用代碼進行制定,以下對象

    private void registRecivers() {
        IntentFilter filter = new IntentFilter();
        filter.addAction(BroadCastAction.NEW_POST_ACTION);
        filter.addAction(BroadCastAction.NEW_POST_SUCCESS_ACTION);
        filter.addAction(BroadCastAction.NEW_POST_FAIL_ACTION);
        filter.addAction(Action.ACTION_CIRCLE_MSG_UPDATE);
        filter.addAction(Action.ACTION_CIRCLE_HOME_UPDATE);
        filter.addAction(Action.ACTION_CIRCLE_PERSONAL_UPDATE);
        //註冊走起:參數1爲receiver,參數2爲intent過濾器
        registerReceiver(receiver, filter);
    }

【2】在AndroidManifest.xml文件中進行配置ip

        <receiver android:name="com.zte.moa.receiver.SipBroadcastReceiver" >
            <intent-filter>
                <action android:name="com.zte.moa.call_action.org.doubango.ngn.services.impl.NgnHttpClientService" />
            </intent-filter>
        </receiver>

這裏有個坑!!!用sipBroadcastReceiver.java來舉個例子ci

使用方式【2】的話是有條件的:sipBroadcastReceiver.java 必須存在這個類

必定必定!!!!不能在Activity中寫成內部類sipBroadcastReceiver,這樣會報錯!!!

網上看到已經有哥麼掉坑裏去過了:

http://www.verydemo.com/demo_c131_i26767.html

相關文章
相關標籤/搜索