PendingIntent для запуска и остановки службы


Я пытаюсь сделать простой виджет с кнопкой, которая запускает Service с помощью OnClickPendingIntent(). Я могу начать его нормально, но я не могу придумать способ остановить его (я знаю, что могу сделать это с помощью BroadcastReceiver или чего-то подобного, но я хотел бы избежать жесткого кода).

Вот мой код:

        Intent intent = new Intent(context, myService.class);
        PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);

        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.my_widget);

        if (!ismyserviceup(context)) {
            views.setOnClickPendingIntent(R.id.my_button, pendingIntent);
        } else {
            // i need to stop it!!!!
        }
1 8

1 ответ:

Есть несколько способов сделать это, вот один:

    Intent intent = new Intent(context, myService.class);

    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.my_widget);

    if (ismyserviceup(context)) {
        intent.setAction("STOP");
    }
    PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);                
    views.setOnClickPendingIntent(R.id.my_button, pendingIntent);

Затем на сервисе onStartCommand(), Вы можете проверить действие намерения на "стоп" (вы, вероятно, должны использовать лучшую строку) и вызвать stopSelf().