【问题标题】:broadcast receiver not receiving intent from service广播接收器未接收到来自服务的意图
【发布时间】:2018-06-29 19:10:56
【问题描述】:

我搜索了 SO,甚至发现了一个与我的问题或多或少同名的问题。但我的代码仍然无法正常工作。

我尝试使用广播将位置从我的 GPS 服务发送到我的 MainActivity。

在我的 GPS 服务中我会这样做

Intent intent = new Intent(MainActivity.EXTRA_NEW_POS_FOR_PLOTTING_INTENT);
            intent.putExtra(MainActivity.EXTRA_NEW_POS_FOR_PLOTTING, new LatLng(location.getLatitude(), location.getLongitude()));
            LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

在 MainActivity.onCreate() 的接收端我做:

mBroadcastReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                LatLng pos = intent.getExtras().getParcelable(EXTRA_NEW_POS_FOR_PLOTTING);
                newLocForPlotting(pos);
            }
        };

在 MainActivity.onStart() 我有:

LocalBroadcastManager.getInstance(this).registerReceiver(mBroadcastReceiver, new IntentFilter(EXTRA_NEW_POS_FOR_PLOTTING_INTENT ));

我知道我的服务调用了 sendBroadcast(),但我的 onReceive() 从未被调用过。

出了什么问题?

【问题讨论】:

  • 将您的 Activity.onStart() 方法代码放入 Activity.onResume()

标签: android broadcastreceiver


【解决方案1】:

将此代码放入您的活动 onResume 方法中。

LocalBroadcastManager.getInstance(this).registerReceiver(mBroadcastReceiver, new IntentFilter(EXTRA_NEW_POS_FOR_PLOTTING_INTENT ));

你也可以像这样使用本地广播

Intent intent = new Intent(BundleTags.BROADCAST_TAG_FOR_INCOMING_CALL_REQUEST);
            // You can also include some extra data.
            intent.putExtra(RESPONSE_MESSAGE, body);

LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

活动中

 LocalBroadcastManager.getInstance(ServiceProviderActivity.this).registerReceiver(myReceiver,
                new IntentFilter(BROADCAST_TAG_FOR_INCOMING_CALL_REQUEST));

【讨论】:

  • 将 registerReceiver 放入 onResume 似乎可以解决问题。你知道为什么它不能在 onStart 中,正如我在许多来源中看到的那样吗?
  • 是的,但我想知道您是否对我的后续问题有答案
  • 其实我不知道你的实现,但据我了解,你的 onstart 在某些情况下没有调用
  • 如果您的活动正在运行并且您暂停应用程序,则 onstart 不会调用,只有 onresume 会调用。
  • 现在我找到了根本原因。当启动附加到 Android Studio 时,我的应用程序正在执行 onStart(),然后是 onResume(),然后在 20 毫秒内 onPause()/onResume()(无论出于何种原因)。它来了:我在 onPause() 中有我的 unregisterReceiver。所以你当然必须在 onResume()/onPause() 或 onStart()/onStop() 中注册/取消注册。 ..显然
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-27
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多