我正在尝试将数据从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);
}
}
}
答案 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