第一行代码-5.4 使用本地广播
16lz
2021-01-26
使用前面所说的广播的范围是全局的,一个应用程序发送的广播可能被其他程序截获,所以Android还定义了另一种广播:本地广播,只能被本程序接收的广播。实现起来也不难,用LocalBroadcastManager就行了。
private IntentFilter filter; private LocalBroadcastManager localBroadcastManager; private LocalReceiver localReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); localBroadcastManager = LocalBroadcastManager.getInstance(MainActivity.this); // 获取实例 mButton = (Button) findViewById(R.id.send_broadcast_button); mButtonLocal = (Button) findViewById(R.id.send_localbroadcast_button); mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { Intent intent = new Intent(); intent.setAction("static_broadcast"); //sendBroadcast(intent); sendOrderedBroadcast(intent, null); // 发送有序广播 } }); mButtonLocal.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { Intent intent = new Intent("com.example.broadcasttest.LOCAL_BROADCAST"); localBroadcastManager.sendBroadcast(intent); } }); filter = new IntentFilter(); filter.addAction("com.example.broadcasttest.LOCAL_BROADCAST"); localReceiver = new LocalReceiver(); localBroadcastManager.registerReceiver(localReceiver, filter); // 注册本地广播监听器 } class LocalReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "成功接收本地广播!", Toast.LENGTH_LONG).show(); } }; @Override protected void onDestroy() { localBroadcastManager.unregisterReceiver(localReceiver); super.onDestroy(); }
从代码来看,声明和注册的方式和一般的广播类似,只是接收的注册和广播的发送都要通过LocalBroadcastMananger来实现。
实现效果:
注意:为什么本地广播不能通过静态的方式注册呢?因为本地广播只能自己的应用接收,所以发送本地广播的时候,程序肯定已经启动了,而静态注册广播的目的就是让程序没有启动的时候,也可以接收到广播。所以,静态注册对于本地广播是没有必要的。
更多相关文章
- Android(安卓)浅析 Broadcast(三) 发送原理
- android启动另一个app应用
- Android(安卓)8.0静态广播无法接收的问题
- android 动态注册JNI函数过程源码分析
- Android中广播的基本原理
- Android常亮设置以及读取电量
- android监听网络状态,实时更新网络状态
- Android(安卓)解决静态广播收不到的问题
- Android十八章:EventBus3.0使用