通过接口将数据从 activity 传递到服务

Passing data from activity to service through interface

我正在尝试将数据从 Android Activity 传递到服务。我试图通过调用另一个包含接口的 class 中的方法来做到这一点,该接口由服务实现。

MQTTNotifier(Activity) >> MQTTServiceDelegate(中间人,有接口)>> MQTTService(实现接口)

这可能吗?除了 MQTTServiceDelegate subscribeToTopic() 方法之外,我似乎无法获得 String 主题,我现在想将它转发给服务。

MQTTNotifier Activity

这是我对 MQTTServiceDelegate 内部方法的调用,我正在向它传递一个字符串主题名称。

MQTTServiceDelegate.subscribeToTopic(topicName);

MQTTServiceDelegate(中间人)

这是界面

public interface SubscribeHandler {
    public void handleSubscribe(String topic);
}

我在这里尝试获取 String 主题,并将其传递给接口,我希望服务能够接收该接口并对其进行处理。

  public static void subscribeToTopic(String topic) {
  SubscribeHandler subscribeHandler = new SubscribeHandler() {

    @Override
    public void handleSubscribe(String topic) {
      // TODO Auto-generated method stub

      // WHAT DO I DO HERE?


    }
  }; 
}

MQTTService

这是Service内部的接口方法实现

  @Override
  public void handleSubscribe(String topic) {
    // TODO Auto-generated method stub
    if (isOnline()) {

      if (connectToBroker()) {

        Log.e("SUBSCRIBE TO ANOTHER TOPIC", "SUBSCRIBE TO ANOTHER TOPIC");
        subscribeToTopic(topic);
      }
    }

  }

您可以在启动服务时将来自 Android activity 的数据作为 intent extras 传递给服务。

Intent i = new Intent(this, MyService.class);
i.putExtra("key", value);
startService(i);

您服务的 onHandleIntent() 方法内部:

@Override
protected void onHandleIntent(Intent intent) {
   String data = intent.getStringExtra(key);
   ...
}

Passing data from activity to service through interface

为了使用接口从 Activity 获取数据到服务,我们需要在服务中实现的 Actvity 中获取接口对象。

例如仅供测试:

1.在服务中创建静态引用:

public static SubscribeHandler subscribeHandler;

2. 在服务的 onStartCommand() 方法中将其分配给 subscribeHandler:

subscribeHandler=this;

现在开始服务访问 subscribeHandler in Activity 从服务发送数据:

subscribeHandler.handleSubscribe("Message");

但是使用静态对象在应用程序组件之间发送数据并不是好的方法

因此,对于服务与 Activity 之间的通信,请使用 LocalBroadcastManager

How to use LocalBroadcastManager?