Остановить службу из PendingIntent после открытия уведомления - PullRequest
0 голосов
/ 06 июня 2018

Я хочу, чтобы служба выполняла stopForeground и stopSelf после нажатия на уведомление с последующим запуском pendingIntent.

Я пытался использовать BroadcastReceiver, который никогда не вызывается, как я проверял во время отладки.Я добавил это, чтобы проявить также.

Intent intentHide = new Intent(this, StopServiceReceiver.class);
PendingIntent hide = PendingIntent.getBroadcast(this, (int) System.currentTimeMillis(), intentHide, PendingIntent.FLAG_CANCEL_CURRENT);

Добавлен в компоновщик

builder.setContentIntent(hide);

И Broadcast Rec выполняется отдельно -

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, TimerService.class);
        context.stopService(service);
    }
}

Манифест -

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

Это не работает.Уведомление и сервис оба живы.

Вопросы - Должен ли я использовать addContent вместо setContentIntent?Если да, то какими должны быть параметры?Есть ли что-то, с чем я ошибся?Что может быть не так с такой реализацией?Спасибо.

1 Ответ

0 голосов
/ 06 июня 2018

У меня была такая же проблема в уведомлении.

Этот код работает отлично.

void creatnotifiaction()
{
    public static final String STOP = "com.example.android";
    public static final int REQUEST_CODE = 333;

        filter = new IntentFilter();
        filter.addAction(STOP);

        Intent intentHide = new Intent(STOP);
        PendingIntent hide = PendingIntent.getBroadcast(this,REQUEST_CODE,intentHide,PendingIntent.FLAG_CANCEL_CURRENT);

     registerReceiver(broadcastReceiver, filter);

}

Нет необходимости использовать отдельное использование приемника вещания в одном классе.

BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        @SuppressLint("ResourceAsColor")
        @Override
        public void onReceive(Context context, Intent intent) {
            final String action = intent.getAction();
            Log.d("notification", "Received intent with action " + action);

            switch (action) {
                case STOP:
                    //your code to stop notifications or service. 

                    break;
         }
});

Дайте мне знать, если это работает для вас.Спасибо ... Удачного кодирования.

...