全局广播
1、发送的广播事件可被其他应用程序获取,也能响应其他应用程序发送的广播事件。
2、默认发送的广播,就是全局广播,所有的App都可以请求接受。
本地广播
介绍
1、发送的广播事件不被其他应用程序获取,也不能响应其他应用程序发送的广播事件。
2、本地广播只能被动态注册,不能静态注册。动态注册或方法时需要用到LocalBroadcastManager。
代码
注意,广播的创建LocalBroadcastManager这个类AndroidX无法直接得到这个类,必须得添加依赖
implementation'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
广播的创建
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
btnLocal = (Button) findViewById(R.id.btn_local);
ivImage = (ImageView) findViewById(R.id.iv_image);
//本地广播 只能动态创建
localBroadcastManager = LocalBroadcastManager.getInstance(this);
//动态注册一个广播
myReceiver = new MyReceiver(ivImage);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.local");
localBroadcastManager.registerReceiver(myReceiver,intentFilter);
//发送广播的点击事件
btnLocal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
//与上面动态创建的广播频道得是一样的
intent.setAction("com.local");
localBroadcastManager.sendBroadcast(intent);
}
});
}
必须销毁广播
@Override
protected void onDestroy() {
//有注册就有销毁
super.onDestroy();
localBroadcastManager.unregisterReceiver(myReceiver);
}
可以通过构造传递控件进行更新UI的操作
receiver里的代码
public class MyReceiver extends BroadcastReceiver {
private ImageView imageView;
public MyReceiver(ImageView imageView) {
this.imageView = imageView;
}
private static final String TAG = "MyReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "onReceive: ");
//更新UI 这里也是主线程
imageView.setImageResource(R.mipmap.ic_map);
}
}
案列
BroadCastReceiver和Notifcation
注册广播,发送内容
public class MyReceiver extends BroadcastReceiver {
private static final String TAG = "MyReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "onReceive: ");
Notification.Builder builder = new Notification.Builder(context);
builder.setAutoCancel(true);
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setContentText("标题");
builder.setContentText("内容");
Notification build = builder.build();
NotificationManager manager =(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(1,build);
}