一:本地广播:LocalBroadcastManager :本地广播管理器
这种通知的好处是安全性高,效率也高,适合局部通信,app内部使用,可代替hander更新UI
备注:本地广播只能动态注册,不能静态注册
二:使用步骤:
1:这个类是android-support-v4.jar中的,要导入这个jar包才点得出来
2:获取实例:LocalBroadcastManager.getInstance(this)
3:直接上代码吧。
package com.example.fmtest.broadcast;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import androidx.annotation.Nullable;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import com.example.fmtest.R;
//本地广播测试
public class BroadcastReceiveTestActivity extends Activity {
private final String TAG = “BroadcastActivity”;
private MyLocalBroadcastReceive localBroadcastReceive;
private LocalBroadcastManager localBroadcastManager;
private Button bt_broadcast;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_broadcast_local);
bt_broadcast= findViewById(R.id.bt_broadcast);
registerReceive();
bt_broadcast.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("com.broadcast.test");
intent.putExtra("message", "搜索斗罗大陆");
if (null != localBroadcastManager) {
Log.i(TAG, "模拟发送广播消息:");
localBroadcastManager.sendBroadcast(intent);
}
}
});
}
private void registerReceive() {
if (null == localBroadcastManager) {
localBroadcastManager = LocalBroadcastManager.getInstance(this);
}
if (localBroadcastReceive == null) {
localBroadcastReceive = new MyLocalBroadcastReceive();
}
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.broadcast.test");
localBroadcastManager.registerReceiver(localBroadcastReceive, intentFilter);
Log.i(TAG, "注册广播消息:");
}
@Override
protected void onResume() {
super.onResume();
}
public class MyLocalBroadcastReceive extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (null != intent) {
String message = intent.getStringExtra("message");
Log.i(TAG, "接收到广播消息 action::" + intent.getAction() + "\tmessage:" + message);
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (localBroadcastManager != null) {
//解绑广播
localBroadcastManager.unregisterReceiver(localBroadcastReceive);
}
}
}