通过接口将数据从 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
我正在尝试将数据从 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