Android 中的广播Broadcast和生活中的广播一样,有发广播和接收广播的,通过静态注册和动态注册两种方式可以对广播接收器进行注册,然后才能接收广播,一人发送广播,多人接收广播,也存在有序广播和无序广播
对于广播发送者来说,广播发送不需要考虑接收者的状态,只负责把广播发送出去即可,而对于哪个应用或者哪个进程接收广播不做关心,可以为广播接收者设置接收的优先级。
对于广播接收者来说,会受到各式各样的广播,所以广播接收者通过过滤机制来拿到自己想要的广播内容
1、发送广播
public class broadcastTest extends AppCompatActivity {
public static final String COM_HUANGDADA_INDEX = "com.huangdada.cn";
private MyBoradcastReciver myBoradcastReciver;
public TextView textView;
private EditText text;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.broadcast_reciver);
textView = findViewById(R.id.resultTextView);
text = findViewById(R.id.inputEditText);
myBoradcastReciver = new MyBoradcastReciver(textView);
//动态注册广播接收器
//为广播接收器添加action
IntentFilter intentFilter=new IntentFilter();
//系统广播
intentFilter.addAction(Intent.ACTION_INSTALL_PACKAGE);
//自定义广播
intentFilter.addAction(COM_HUANGDADA_INDEX);
//注册接收器
registerReceiver(myBoradcastReciver,intentFilter);
//自定义广播
findViewById(R.id.sendBroadcastButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(v.getId()==R.id.sendBroadcastButton){
//相当于广播号,通过这个来识别是哪一个广播
Intent intent=new Intent(COM_HUANGDADA_INDEX);
//给广播添加信息
intent.putExtra("msg", text.getText().toString());
//发送广播
sendBroadcast(intent);
}
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
//取消广播接收器,否则会导致内存泄漏
if(myBoradcastReciver!=null){
unregisterReceiver(myBoradcastReciver);
}
}
}
2、接收广播
public class MyBoradcastReciver extends BroadcastReceiver {
TextView text;
private static final String TAG = "MyBoradcastReciver";
public MyBoradcastReciver(TextView textView) {
text=textView;
}
@Override
public void onReceive(Context context, Intent intent) {
String action=intent.getAction();
String content=intent.getStringExtra("msg");
if(TextUtils.equals(action,"com.huangdada.cn")){
text.setText("广播号:\n"+ action+"\n 广播内容:\n"+content);
}
}
}