博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
说说如何使用 Android 的本地广播
阅读量:1904 次
发布时间:2019-04-26

本文共 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

本地广播有这些优势:

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

转载地址:http://tldcf.baihongyu.com/

你可能感兴趣的文章
C语言:线程同步之信号量(sem_init,sem_post,sem_wait)
查看>>
Linux中对文件描述符的操作(FD_ZERO、FD_SET、FD_CLR、FD_ISSET)
查看>>
Linux ALSA声卡驱动之二:声卡的创建
查看>>
Linux ALSA声卡驱动之三:PCM设备的创建
查看>>
Linux ALSA声卡驱动之四:Control设备的创建
查看>>
Linux ALSA声卡驱动之五:移动设备中的ALSA(ASoC)
查看>>
RT-thread相关
查看>>
Linux 2.6内核Makefile浅析
查看>>
编译和链接的过程
查看>>
Git学习(二):git-rev-parse命令初识
查看>>
vim+ctags+cscope+Taglist+NERDTree打造成SourceInsight
查看>>
vim字符串替换
查看>>
C语言:堆和栈的区别是什么?
查看>>
C语言:二级指针(指向指针的指针)详解
查看>>
C语言:断言assert函数完全攻略
查看>>
C语言:命令行选项解析函数---getopt()和getopt_long()
查看>>
C语言:inline,static inline
查看>>
Git学习(三):Git 撤销commit文件 和 回退push的文件
查看>>
WAV系列之一:G711编解码原理及代码实现
查看>>
WAV系列之二:ADPCM编解码原理及代码实现
查看>>