Local broadcast and global broadcast (according to the scope of transmission)
Local broadcast ( app internal transmission ) data, other apps cannot receive it, ensuring data security
Global broadcast can spread communication between all apps in the entire mobile phone, and there will be security issues . Ordinary broadcasts are global broadcasts by default.
For example, monitor power on, charge, call, send text messages, modify time, etc.
1. Local broadcast can only be registered dynamically
2. Local broadcast needs to use LoaalBroadcasrManager
Code example:
xml file:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".broadcast.local.LocalBroadCastActivity">
<Button
android:id="@+id/btn_local"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:onClick="sendLocalBroadcast"
android:text="本地广播">
</Button>
</androidx.constraintlayout.widget.ConstraintLayout>
java code:
local broadcast class: MyLocalBroadcastReceiver
public class MyLocalBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "MyLocalBroadcastReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "onReceive: 收到了本地广播");
}
}
Activity类:LocalBroadCastActivity
public class LocalBroadCastActivity extends AppCompatActivity {
private MyLocalBroadcastReceiver myLocalBroadcastReceiver = new MyLocalBroadcastReceiver();
LocalBroadcastManager mLocalBroadcastManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_local_broad_cast);
/**
* 本地广播只能动态注册
*/
//实例化
mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
//注册广播接收器
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("local_broad_cast");
mLocalBroadcastManager.registerReceiver(myLocalBroadcastReceiver, intentFilter);
}
//发送本地广播
public void sendLocalBroadcast(View view) {
Intent intent = new Intent();
intent.setAction("local_broad_cast");
mLocalBroadcastManager.sendBroadcast(intent);
}
//解除注册
@Override
protected void onDestroy() {
super.onDestroy();
mLocalBroadcastManager.unregisterReceiver(myLocalBroadcastReceiver);
}
}