2

ブロードキャストで、サービス XYZ から非静的メソッドを呼び出したいと考えています。サービスは、起動時にレシーバーによって開始されます。この実行中のサービスからメソッドを実行するアイデアはありますか? このフォーラムでの 1 つの解決策は、メソッドを静的にし、シングルトン パターンを使用して実行することです。しかし、別の方法はありますか?もしかしてバインダー付き?

//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()システムサービスでキャストできることを知っています。しかし、どうすれば独自のサービス オブジェクトを取得できますか?

挨拶

4

1 に答える 1

5

setActionを起動するインテントで使用して、アクション文字列をインテントに追加できますService。サービスonStartcommandでインテントのアクションを抽出し、それに基づいてサービスでメソッドを実行できます。

これを使用して常にコマンドをサービスに送信するとstartService、サービスが 2 回起動されなくなります。一度開始されるか、新しいインテントがサービスに送信されます。

したがって、起動時の完了セクションで、インテント アクションを必要なものに設定し、サービスを開始する必要があります。else ブロックを完全に削除できます。

サービスで を実装しonStartCommand、インテントのアクションを抽出し、そのアクションに基づいてメソッドを実行するだけです。

于 2013-01-15T19:30:50.247 に答える