第三章--四大組件BroadcastReceiver

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/w_jingjing0428/article/details/52143918

BroadcastReceiver相當於一種全局監聽器, 用於監聽系統全局的廣播消息。如Service和訪問者的通信就可以用BroadcastReceive,一般把RoadcastReceiver當作內部類接收對方的廣播。使用BroadcastReceiver一般有下面幾步:

  1. 實現一個繼承BroadcastReceiver的子類,重寫onReceiver方法
  2. 動態或者靜態指定能匹配的Intent
  3. 調用Context的sendBroadcast()發送廣播

第一步:

public class TestBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

        if (intent != null){
            //接收廣播
            if (TextUtils.equals(intent.getAction(), SendBroadcastActivity.COM_EXAMPLE_BROADCAST)){

                String toastString = intent.getStringExtra("toast");
                Toast.makeText(context, toastString, Toast.LENGTH_SHORT).show();

            }
        }
    }
}

第二步:
靜態指定:

  <receiver android:name=".TestBroadcastReceiver">
            <intent-filter>
                <action android:name="com.example.broadcast"/>
            </intent-filter>
  </receiver>

動態註冊:

         //動態註冊
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(COM_EXAMPLE_BROADCAST);
        registerReceiver(mTestBroadcastReceiver, intentFilter);

第三步:
在activity發送廣播

import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

/**
 *
 * Created by W on 2016/7/29.
 */
public class SendBroadcastActivity extends AppCompatActivity{

    public static final String COM_EXAMPLE_BROADCAST = "com.example.broadcast";
    private TestBroadcastReceiver mTestBroadcastReceiver = new TestBroadcastReceiver();
    private Button mButton;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activty_broadcast);

        mButton = (Button) findViewById(R.id.send_broadcast_button);


        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //發送廣播
                Intent intent= new Intent();
                intent.setAction(COM_EXAMPLE_BROADCAST);
                intent.putExtra("toast", "this is my toast of broadcast");

                sendBroadcast(intent);
            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        //動態註冊
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(COM_EXAMPLE_BROADCAST);
        registerReceiver(mTestBroadcastReceiver, intentFilter);
    }

    @Override
    protected void onStop() {
        super.onStop();
        unregisterReceiver(mTestBroadcastReceiver);
    }
}

這樣基本上就能使用了BroadcastReceiver。在MainActivity中發送廣播,在BroadcastReceiver接收。邏輯還是很簡單。
因爲BroadcastReceiver監聽的是系統的廣播,所以不能亂用和濫用它,如果是在應用裏面可以考慮用LocalBroadcast。使用它和 BroadcastReceiver 註冊與發送廣播差不多,只是調用對象從 Activity 換成了 LocalBroadcastManager。而且只能動態註冊。


寫得不好 sad。。

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