Android本地广播
2024-10-29 15:33:46
Android中使用的广播一般是系统全局广播,即发出的广播可以被其他任何应用程序接收到,并且我们也可以接收来自于其他任何应用程序的广播。这样就很容易会引起安全性的问题,比如说我们发送的一些携带关键性数据的广播有可能被其他的应用程序截获,或者其他的程序不停地向我们的广播接收器里发送各种垃圾广播。
为了能够简单地解决广播的安全性问题,Android 引入了一套本地广播机制,使用这个机制发出的广播只能够在应用程序的内部进行传递,并且广播接收器也只能接收来自本应用 程序发出的广播,这样所有的安全性问题就都不存在了。 另外发送本地广播比发送系统全局广播更加高效。
本地广播的用法并不复杂,主要就是使用了一个 LocalBroadcastManager 来对广播进行管理,并提供了发送广播和注册广播接收器的方法。看下面的代码:
public class MainActivity extends Activity {
private IntentFilter intentFilter;
private LocalReceiver localReceiver;
private LocalBroadcastManager localBroadcastManager; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //获取LocalBroadcastManager
localBroadcastManager = LocalBroadcastManager.getInstance(this); Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("com.example.broadcasttest.LOCAL_BROADCAST");
localBroadcastManager.sendBroadcast(intent); // 发送本地广播
}
}); //注册广播接收器
intentFilter = new IntentFilter();
intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST");
localReceiver = new LocalReceiver();
localBroadcastManager.registerReceiver(localReceiver, intentFilter);
} @Override
protected void onDestroy() {
super.onDestroy(); //注销广播接收器
localBroadcastManager.unregisterReceiver(localReceiver);
} /**
* 自定义广播接收器
*/
class LocalReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "received local broadcast", Toast.LENGTH_SHORT).show();
}
}
}
另外还有一点需要说明,本地广播是无法通过静态注册的方式来接收的。其实这也完全 可以理解,因为静态注册主要就是为了让程序在未启动的情况下也能收到广播,而发送本地 广播时,我们的程序肯定是已经启动了,因此也完全不需要使用静态注册的功能。
最新文章
- Redis 学习(二)
- FreeBSD基金会添加新成员,梁莉成为第一位来自微软和中国的基金会董事
- Android判断横屏竖屏代码
- 【Xamarin挖墙脚系列:多窗口之间的导航】
- Linux - 命令行 管道(Pipelines) 详细解释
- 【转】简单的java缓存实现
- H5 内联 SVG
- LR11 scan correlation 卡死解决方案
- Hybrid App开发之jQuery基础
- JAVA WEBSERVICE服务端&;客户端的配置及调用(基于JDK)
- SpringBoot idea maven打包war
- 不错的ngix/redis/java/android学习地址
- C#编程(十九)----------部分类
- g++编译器的使用
- 如何高效判断java数组是否包含某个值
- 2016-2017-20155329 《Java程序设计》第十周学习总结
- NOIP2017 D1T3逛公园
- sqlite3添加、修改列名(转)
- ios下引用MUI后input不能输入,Android端正常
- java学习笔记之对象序列化
热门文章
- TCP/UDP client/server library for Java, 最好的java语言tcp udp 服务器客户端实现库
- Andrew Ng-ML-第七章-逻辑回归
- SQL备份数据库代码
- 机器学习理论基础学习15---条件随机场(CRF)
- iOS开发--沙盒
- 008-centos服务管理
- Excel脱拽或者下拉公式时, 保持公式里单元格数字不变
- Python: TypeError: 'dict' object is not callable
- Linux基础命令---mkisofs
- MySQL数据库----单表查询