第三章--四大组件BroadcastReceiver
2016-10-02 本文已影响0人
Dddddw
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。。