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

时间:2015-02-19 16:25:34

标签: java android android-activity interface

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

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

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

MQTTNotifier活动

这是我对MQTTServiceDelegate中的方法进行的调用,我将它传递给String topicName。

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

这是服务

中的接口方法实现
  @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);
      }
    }

  }

2 个答案:

答案 0 :(得分:3)

您可以在启动服务时将数据从Android活动传递到服务作为意图附加功能。

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);
   ...
}

答案 1 :(得分:2)

  

通过界面

将数据从活动传递到服务

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

例如,仅用于测试:

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

public static SubscribeHandler subscribeHandler;

2。onStartCommand()服务方法中,将此分配给subscribeHandler:

subscribeHandler=this;

现在,在Service for Service中启动服务访问subscribeHandler以发送数据:

subscribeHandler.handleSubscribe("Message");

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

因此,要在服务和活动之间进行通信,请使用LocalBroadcastManager

How to use LocalBroadcastManager?