Android-уведомление pendingIntent для остановки службы


У меня есть два действия уведомления, одно для остановки службы и одно для ее перезапуска. Я успешно запускаю службу, но не могу остановить ее с помощью этого кода:

PendingIntent show = PendingIntent.getService(this, 1, svc, PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent hide = PendingIntent.getService(this, 1, svc, PendingIntent.FLAG_CANCEL_CURRENT);

Есть идеи?

Не дубликат, поскольку мой вопрос касается именно действий уведомления, а не кнопок (у меня нет проблем с тем, чтобы мои кнопки останавливали и запускали службу).

1 3

1 ответ:

Только этот флаг не остановит службу. Я бы рекомендовал вам сделать действие stop вместо запуска пользовательского класса BroadcastReceiver, который запускает метод stopService() внутри его onReceive(). Дайте мне знать, если вам понадобится помощь в создании чего-то подобного более подробно.

Отредактированный ответ:

Измените ваши Intent и PendingIntent для действия скрыть на это:

Intent intentHide = new Intent(this, StopServiceReceiver.class);

PendingIntent hide = PendingIntent.getBroadcast(this, (int) System.currentTimeMillis(), intentHide, PendingIntent.FLAG_CANCEL_CURRENT);

Затем сделайте StopServiceReceiver таким образом, где ServiceYouWantStopped.class - служба, которая должна быть остановлена:

public class StopServiceReceiver extends BroadcastReceiver {
    public static final int REQUEST_CODE = 333;

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent service = new Intent(context, ServiceYouWantStopped.class);
        context.stopService(service);
    }
}

Убедитесь, что BroadcastReceiver Вы just made объявляется в файле манифеста:

<receiver
    android:name=".StopServiceReceiver"
    android:enabled="true"
    android:process=":remote" />

Надеюсь, это поможет!