如何使用LocalBroadcastManager?
如google docs和Service broadcast doc中所述,如何使用/定位LocalBroadcastManager
?
我试图谷歌它,但没有可用的代码开始?
文件说如果我想在我的应用程序进程内部进行广播,我应该使用它,但我不知道在哪里寻找这个。
任何帮助/评论?
更新 :我知道如何使用广播,但不知道如何在我的项目中使用LocalBroadcastManager
。
#1楼
我宁愿全面回答。
LocalbroadcastManager包含在android 3.0及更高版本中,所以你必须使用支持库v4进行早期版本。 看这里的说明
创建广播接收器:
private BroadcastReceiver onNotice= new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // intent can contain anydata Log.d("sohail","onReceive called"); tv.setText("Broadcast received !"); } };
在onResume中注册您的接收器,例如:
protected void onResume() { super.onResume(); IntentFilter iff= new IntentFilter(MyIntentService.ACTION); LocalBroadcastManager.getInstance(this).registerReceiver(onNotice, iff); } //MyIntentService.ACTION is just a public static string defined in MyIntentService.
onPause中的unRegister接收器:
protected void onPause() { super.onPause(); LocalBroadcastManager.getInstance(this).unregisterReceiver(onNotice); }
现在,每当从应用程序的活动或服务发送localbroadcast时,onReceive on onNotice将被调用:)。
编辑:您可以在这里阅读完整的教程LocalBroadcastManager:Intra应用程序消息传递
#2楼
可以在开发人员文档中找到实现LocalBroadcastManager的Activity和Service的示例。 我个人发现它非常有用。
编辑:此后该链接已从网站中删除,但数据如下: https : //github.com/carrot-garden/android_maven-android-plugin-samples/blob/master/support4demos/src/com/例如/机器人/ supportv4 /内容/ LocalServiceBroadcaster.java
#3楼
我们也可以在这里使用与broadcastManger相同的接口我正在通过接口共享broadcastManager的testd代码。
首先做一个像这样的界面:
public interface MyInterface {void GetName(String name);
}
2 - 这是第一个需要实现的类
public class First implements MyInterface{MyInterface interfc; public static void main(String[] args) {First f=new First(); Second s=new Second();f.initIterface(s);f.GetName("Paddy");}private void initIterface(MyInterface interfc){this.interfc=interfc;}public void GetName(String name) {System.out.println("first "+name);interfc.GetName(name); }
}
3 - 这是实现相同接口的第二个类,其方法自动调用
public class Second implements MyInterface{public void GetName(String name) {System.out.println("Second"+name);}
}
所以通过这种方法我们可以使用与broadcastManager相同的接口。
#4楼
当你玩LocalBroadcastReceiver时我会建议你试试Green Robot的EventBus - 你肯定会意识到它与LBR相比它的区别和用处。 可以使用更少的代码,可以自定义接收者的线程(UI / Bg),检查接收器可用性,粘性事件,事件作为数据传递等。
#5楼
在接收结束时:
- 首先注册LocalBroadcast Receiver
然后处理onReceive中的传入意图数据。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this); lbm.registerReceiver(receiver, new IntentFilter("filter_string")); } public BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent != null) { String str = intent.getStringExtra("key"); // get all your data from intent and do what you want } } };
发送结束时:
Intent intent = new Intent("filter_string");intent.putExtra("key", "My Data");// put your all data using put extra LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
#6楼
如何将全局广播更改为LocalBroadcast
1)创建实例
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
2)用于注册BroadcastReceiver
更换
registerReceiver(new YourReceiver(),new IntentFilter("YourAction"));
同
localBroadcastManager.registerReceiver(new YourReceiver(),new IntentFilter("YourAction"));
3)用于发送广播消息
更换
sendBroadcast(intent);
同
localBroadcastManager.sendBroadcast(intent);
4)取消注册广播消息
更换
unregisterReceiver(mybroadcast);
同
localBroadcastManager.unregisterReceiver(mybroadcast);
#7楼
androidx.localbroadcastmanager
在 1.1.0 版中已被弃用
原因
LocalBroadcastManager
是一个应用程序范围的事件总线,并在您的应用程序中包含图层违规; 任何组件都可以侦听来自任何其他组件的事件。 它继承了系统BroadcastManager不必要的用例限制; 开发人员必须使用Intent,即使对象只存在于一个进程中而且永远不会离开它。 出于同样的原因,它不遵循功能方面的BroadcastManager。
这些加起来令人困惑的开发人员体验。
替换
您可以将LocalBroadcastManager
使用替换为可观察模式的其他实现。 根据您的使用情况,合适的选项可能是LiveData
或反应流。
LiveData的优势
您可以使用单例模式扩展LiveData
对象以包装系统服务,以便可以在应用程序中共享它们。 LiveData
对象连接到系统服务一次,然后任何需要该资源的观察者都可以只观看LiveData
对象。
public class MyFragment extends Fragment {@Overridepublic void onActivityCreated(Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);LiveData<BigDecimal> myPriceListener = ...;myPriceListener.observe(this, price -> {// Update the UI.});}
}
observe()
方法将片段( LifecycleOwner
一个实例)作为第一个参数传递。 这样做表示此观察者绑定到与所有者关联的Lifecycle
对象,这意味着:
如果Lifecycle对象未处于活动状态,则即使值发生更改,也不会调用观察者。
销毁Lifecycle对象后,会自动删除观察者
LiveData
对象具有生命周期感知这一事实意味着您可以在多个活动,片段和服务之间共享它们。
#8楼
以下是如何使用广播接收器https://youtu.be/m_aP8E35jaE的示例
#9楼
无论如何我会回答这个问题。 以防有人需要它。
ReceiverActivity.java
监视名为"custom-event-name"
的事件的通知的活动。
@Override
public void onCreate(Bundle savedInstanceState) {...// Register to receive messages.// We are registering an observer (mMessageReceiver) to receive Intents// with actions named "custom-event-name".LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,new IntentFilter("custom-event-name"));
}// Our handler for received Intents. This will be called whenever an Intent
// with an action named "custom-event-name" is broadcasted.
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {// Get extra data included in the IntentString message = intent.getStringExtra("message");Log.d("receiver", "Got message: " + message);}
};@Override
protected void onDestroy() {// Unregister since the activity is about to be closed.LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);super.onDestroy();
}
SenderActivity.java
发送/广播通知的第二个活动。
@Override
public void onCreate(Bundle savedInstanceState) {...// Every time a button is clicked, we want to broadcast a notification.findViewById(R.id.button_send).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {sendMessage();}});
}// Send an Intent with an action named "custom-event-name". The Intent sent should
// be received by the ReceiverActivity.
private void sendMessage() {Log.d("sender", "Broadcasting message");Intent intent = new Intent("custom-event-name");// You can also include some extra data.intent.putExtra("message", "This is my message!");LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
使用上面的代码,每次单击按钮R.id.button_send
,都会广播一个Intent, mMessageReceiver
ReceiverActivity
的mMessageReceiver
ReceiverActivity
。
调试输出应如下所示:
01-16 10:35:42.413: D/sender(356): Broadcasting message
01-16 10:35:42.421: D/receiver(356): Got message: This is my message!
#10楼
在Eclipse中,最终我必须通过右键单击我的项目并选择以下内容来添加兼容性/支持库 :
Android工具 - > 添加支持库
一旦添加,我就可以在我的代码中使用LocalBroadcastManager
类。
如何使用LocalBroadcastManager?相关推荐
- Android之LocalBroadcastManager源码解析
转载请标明出处:[顾林海的博客] 个人开发的微信小程序,目前功能是书籍推荐,后续会完善一些新功能,希望大家多多支持! 前言 广播想必大家都不陌生,日常开发中同一个APP中的多个进程之间需要进行传输信息 ...
- Fragment使用LocalBroadcastManager接收广播消息
这种方式不用在配置文件加东西 变量声明 [java] view plaincopy LocalBroadcastManager broadcastManager; IntentFilter inten ...
- Android LocalBroadcastManager 的使用总结
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/53105494 本文出自[赵彦军的博客] 前言 在Android中,Broadcas ...
- 关于LocalBroadcastManager的介绍和优势
在Android系统中,BroadcastReceiver的设计初衷就是从全局考虑的,可以方便应用程序和系统.应用程序之间.应用程序内的通信,所以对单个应用程序而言BroadcastReceiver是 ...
- LocalBroadcastManager 的使用
一.使用本地广播发送一条广播(本例为自己发送自己接收,本地广播也可以是其他应用接收)然后接收到广播时回调Receiver类中的回调方法onReceive()在此方法中自定义发出通知 代码 1 pack ...
- android广播第三方库,Android Support 库:LocalBroadcastManager
在介绍完 Android Support 库发展历程(http://blog.chengyunfeng.com/?p=1047)后, 再分别介绍下 Android Support 库中有用但是被忽略的 ...
- Android编程之LocalBroadcastManager源码详解
LocalBroadcastManager 是V4包中的一个类,主要负责程序内部广播的注册与发送.也就是说,它只是适用代码中注册发送广播,对于在AndroidManifest中注册的广播接收,则不适用 ...
- 使用LocalBroadcastManager
LocalBroadcastManager是Android Support包提供了一个工具,是用来在同一个应用内的不同组件间发送Broadcast的. 使用LocalBroadcastManager有 ...
- 本地广播LocalBroadcastManager简单使用
/** * 由于系统的全局广播可以被任何应用程序接收到,并且我们也可以接收来自任何程序的广播 * 这样很容易引起安全问题,因此Google引入的本地广播LocalBroadcastManager */ ...
最新文章
- 程序员请收好:10个非常有用的 Visual Studio Code 插件!
- python 中文字转拼音
- CSDN 字体颜色表
- wp7使用Cocos2d-X for XNA制作一个塔防类游戏 (二)在游戏中加入地图和怪物。(上)
- 强化学习(八)价值函数的近似表示与Deep Q-Learning
- 从SAP社区上的一篇博客开始,聊聊SAP产品命名背后的那份情怀
- RTP在。net中的使用(资料)
- 关于遍历字典的二三事
- 基姆拉尔森计算公式(算任意日期是星期几)
- Win-MASM64汇编语言-JMP指令
- dask 于数据分析_利用Dask ML框架进行欺诈检测-端到端数据分析
- WEB前端经典笔试/面试题
- 基于raspbian+motion的家庭监控网络
- python 爬虫 爬取 小米有品 全网 商品数据
- 使用Windows自带工具WINSat给硬盘测速
- 一篇文章,中文发完英文发,算“一稿多投”吗?
- 关于O(log2n)的个人理解
- 喜大普奔!GitHub 官方 App 正式版首发!
- LIUNX账户与安全
- Dataframe两列值去重