如何从广播的正在运行的服务中执行方法?

时间:2013-01-15 14:44:48

标签: android service communication broadcast

广播上的

我想从服务XYZ调用非静态方法。服务由启动时的接收器启动。 有人有想法从这个正在运行的服务运行方法吗? 此论坛中的一个解决方案是使方法静态并使用单例模式执行。但还有另一种方法吗?也许用粘合剂?

// EDIT例如我有以下条款:

public class MyService extends Service{
   .....
   public void method(){
      //TODO
   }
}
public class MyBroadcastReceiver extends BroadcastReceiver{
   .....
  public void onReceive(Context context, Intent intent) {
    String intentAction=intent.getAction();
    if(intentAction.equals(Intent.ACTION_BOOT_COMPLETED)){  
        //start service
        Intent serviceIntent = new Intent(context, MyService.class);
        context.startService(serviceIntent);

    }
    else{ 
     //TODO call method() in MyService
    }
}

如何调用方法method()?我知道我可以使用context.getSystemService()系统服务进行投射。但是我如何获得自己的服务对象?

问候

1 个答案:

答案 0 :(得分:4)

您可以使用setAction在启动Service的意图中为您的意图添加操作字符串。在您的服务onStartcommand中,您可以提取意图的操作,并根据您可以在您的服务中执行该方法。

您将始终使用startService向您的服务发送命令,这不会启动您的服务两次。它将启动一次,或者将新意图发送到服务。

因此,在启动完成部分中,您应该将意图操作设置为您想要的任何内容,并启动该服务 - 您可以完全删除else块。

在您的服务中实施onStartCommand,提取意图的操作,并根据该操作执行您的方法。