Search code examples
javaandroidandroid-notificationsandroid-pendingintent

Android - Notification pendingIntent to Stop Service


I have two notification actions, one to stop the service and one to restart it. I am successfully starting the service but I can't stop it with this code:

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

Any ideas?

Not a duplicate as my question is specifically about notification actions, not buttons (I have no problems getting my buttons to stop and start the service).


Solution

  • That flag alone will not stop the service. I would recommend that you make the stop action instead fire a custom BroadcastReceiver class which runs the stopService() method inside of its onReceive(). Let me know if you need help setting something like that up in more detail.

    Edited answer:

    Change your Intent and PendingIntent for the hide action to this:

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

    Then make the StopServiceReceiver like this, where ServiceYouWantStopped.class is the service to be stopped:

    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);
        }
    }
    

    Make sure the BroadcastReceiver you just made is declared in your manifest file:

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

    Hope this helps!