说说如何使用 Android 的本地广播
发布日期:2021-06-29 21:10:00 浏览次数:2 分类:技术文章

本文共 1981 字,大约阅读时间需要 6 分钟。

Android 的全局广播存在安全性方面的问题。比如发送一些关键性的数据广播有可能会被其他的应用程序所捕获,或者不断收到其他程序所发送的各种垃圾广播等。

本地广播就是为了解决这一方面的安全性问题,它只能够在应用程序的内部进行传递,并且广播接收器也只能接收来自本应用程序发出的广播。

本地广播使用了 LocalBroadcastManager 来对广播进行管理,并提供了发送广播和注册广播接收器的方法。

在 项目的基础上,修改 MainActivity:

public class MainActivity extends AppCompatActivity {
private LocalReceiver localReceiver = new LocalReceiver(); private LocalBroadcastManager localBroadcastManager = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); localBroadcastManager = LocalBroadcastManager.getInstance(this); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {// sendBroadcast(new Intent("net.deniro.android.MY_BROADCAST"));// sendOrderedBroadcast((new Intent("net.deniro.android.MY_BROADCAST")),null); //发送本地广播 localBroadcastManager.sendBroadcast(new Intent("net.deniro.android.MY_BROADCAST")); } }); //注册本地广播 IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("net.deniro.android.MY_BROADCAST"); localBroadcastManager.registerReceiver(localReceiver, intentFilter); } @Override protected void onDestroy() { super.onDestroy(); localBroadcastManager.unregisterReceiver(localReceiver);//注销本地广播 } /** * 本地广播 */ private class LocalReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "收到本地广播O(∩_∩)O哈哈~", Toast.LENGTH_SHORT).show(); } }}

这里使用了 LocalBroadcastManager 类的实例来发送、注册与注销本地广播。

运行程序:

收到本地广播

注意:本地广播是无法通过静态注册的方式来接收的。因为静态注册是为了让程序在未启动的情况下也能接收到广播,而程序如果还未启动,自然也就无法使用本地广播啦O(∩_∩)O

本地广播有这些优势:

* 可以明确知道正在发送的广播不会离开当前程序,自然也就不需要担心数据泄漏的问题。
* 其他程序无法将广播发送到我们程序的内部,所以不能担心安全漏洞。
* 发送本地广播比发送系统全局广播会更加高效。

转载地址:https://deniro.blog.csdn.net/article/details/79428619 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:说说在 Android 中如何实现强制下线功能
下一篇:说说在 Android 中如何发送自定义广播

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月05日 00时43分44秒