如何在FlutterPlugin类中访问BroadcastReceiver数据

问题描述

问题

我正在使用Radar SDK,并且已经在我的broadcastReceiver类中成功接收了事件。我面临的问题是我想在每次事件发生时向EventChannel添加数据,但是由于它们在后台运行,所以我不知道该怎么做,因为它们位于具有不同上下文的不同类中。

我的代码

这是我的broadcastReceiver代码。它从实现broadcastReceiver的SDK实现了RadarReceiver。

public class MyRadarReceiver constructor(val events: EventChannel.EventSink) : RadarReceiver() {

  override fun onEventsReceived(context: Context,events: Array<RadarEvent>,user: RadarUser) {
    println("an event was received")
  }

  override fun onLocationUpdated(context: Context,location: Location,user: RadarUser) {
    println("location was updated")
  }

  override fun onClientLocationUpdated(context: Context,stopped: Boolean,source: Radar.RadarLocationSource) {
    println("client location updated")
  }

  override fun onError(context: Context,status: Radar.RadarStatus) {
    println(status)
  }

  override fun onLog(context: Context,message: String) {
    println(message)
  }

}

所有这些打印语句均已打印,因此可以接收事件。

这是我插件的一部分代码(另一个类):

public class FlutterRadarIoPlugin : FlutterPlugin,MethodCallHandler,ActivityAware,EventChannel.StreamHandler,EventCallback {

  private lateinit var channel: MethodChannel
  private lateinit var eventChannel: EventChannel
  private var mEventSink: EventChannel.EventSink? = null
  private var activity: Activity? = null
  private var context: Context? = null

  .
  .
  .

  override fun onAttachedToEngine(@NonNull FlutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
    this.context = FlutterPluginBinding.getApplicationContext()
    channel = MethodChannel(FlutterPluginBinding.getFlutterEngine().getDartExecutor(),"Flutter_radar_io")
    channel.setMethodCallHandler(this)
    eventChannel = EventChannel(FlutterPluginBinding.getFlutterEngine().getDartExecutor(),"radarStream")
    eventChannel.setStreamHandler(this)
  }

  .
  .
  .

  override fun onListen(o: Any?,eventSink: EventChannel.EventSink) {
    mEventSink = eventSink;
  }

  override fun onCancel(o: Any?) {
    mEventSink = null;
  }
}

我需要什么

为了让我向EventChannel添加数据,我需要执行mEventSink.success(data),但是,在MyRadarReceiver中,我不知道如何访问它,而且我不确定我可以通过其他方式完成此操作。如果您需要查看更多代码,请告诉我共享没有问题。我希望在完成此插件后立即将其开源,因此没有任何秘密。

在此代码段中,已在Android Manifest文件中设置了接收器,但是,我也尝试以编程方式设置接收器。以编程方式设置接收器不起作用,因为没有捕获任何事件。在我询问此问题的地方查看此问题:How to set a programmatic Receiver with IntentFilter?

代码中的...表明那里还有其他代码,但是我只想只包含相关的内容。这运行没有错误,我只是不确定如何从MyRadarReceiver添加到我的EventChannel

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)