版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/w_jingjing0428/article/details/52143918
BroadcastReceiver相當於一種全局監聽器, 用於監聽系統全局的廣播消息。如Service和訪問者的通信就可以用BroadcastReceive,一般把RoadcastReceiver當作內部類接收對方的廣播。使用BroadcastReceiver一般有下面幾步:
- 實現一個繼承BroadcastReceiver的子類,重寫onReceiver方法
- 動態或者靜態指定能匹配的Intent
- 調用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。。