首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用LocalBroadcastManager?

如何使用LocalBroadcastManager?
EN

Stack Overflow用户
提问于 2012-01-10 10:57:47
回答 12查看 266.7K关注 0票数 477

如何使用/定位LocalBroadcastManager,如谷歌文档服务广播文档所述

我试着用谷歌搜索,但一开始没有可用的代码吗?

文件上说,如果我想在我的应用程序的过程中进行内部广播,我应该使用它,但我不知道在哪里可以找到它。

有什么帮助/评论吗?

更新:我知道如何使用广播,但不知道如何使LocalBroadcastManager在我的项目中可用。

EN

回答 12

Stack Overflow用户

发布于 2012-01-16 02:45:29

无论如何我都会回答的。以防万一有人需要。

ReceiverActivity.java

监视名为"custom-event-name"的事件的通知的活动。

代码语言:javascript
复制
@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() {
  @Override
  public void onReceive(Context context, Intent intent) {
    // Get extra data included in the Intent
    String 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

发送/广播通知的第二个活动。

代码语言:javascript
复制
@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() {
    @Override
    public 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时,mMessageReceiver都会在ReceiverActivity中广播和接收意图。

调试输出应该如下所示:

代码语言:javascript
复制
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! 
票数 883
EN

Stack Overflow用户

发布于 2012-04-26 05:18:02

我宁愿全面回答。

  1. LocalbroadcastManager包含在Android3.0和更高版本中,所以您必须使用支持库v4进行早期发布。见指令这里
  2. 创建广播接收器: 私有BroadcastReceiver onNotice=新BroadcastReceiver() { @Override void onReceive(上下文上下文,意图){ //意图可以包含anydata Log.d("sohail","onReceive called");tv.setText(“广播接收!");};
  3. 在活动的onResume中注册您的接收器,例如: 受保护的onResume() { super.onResume();IntentFilter iff= new IntentFilter(MyIntentService.ACTION);IntentFilter iff;}//MyIntentServices.ACTION只是在MyIntentService中定义的公共静态字符串。
  4. unRegister接收机在onPause中: 保护的onPause() { super.onPause();super.onPause}
  5. 现在,每当从应用程序的活动或服务发送本地广播时,将调用onReceive of onNotice :)。

编辑:您可以在这里阅读完整的教程,LocalBroadcastManager:内部应用程序消息传递

票数 134
EN

Stack Overflow用户

发布于 2016-11-18 07:48:02

接收端的

  • 第一寄存器LocalBroadcast接收机
  • 然后在onReceive中处理传入的意图数据。 @重载受保护的savedInstanceState(Bundle savedInstanceState) { super.onCreate(savedInstanceState);LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);lbm.registerReceiver(接收者,新的IntentFilter("filter_string"));} public BroadcastReceiver receiver =新BroadcastReceiver() {@重载公共void (上下文,意图){ if (意图!= null) { String str = intent.getStringExtra("key");//从意图中获取所有数据,并执行您想要的} };

发送端的

代码语言:javascript
复制
   Intent intent = new Intent("filter_string");
   intent.putExtra("key", "My Data");
   // put your all data using put extra 

   LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
票数 47
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8802157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档