6

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).

Code Poet
  • 6,222
  • 2
  • 29
  • 50
  • 5
    Possible duplicate of [PendingIntent to launch and stop a Service](http://stackoverflow.com/questions/20572216/pendingintent-to-launch-and-stop-a-service) – Charuක Dec 28 '16 at 09:55
  • 1
    Why are you using the same request code for two different actions? I think you are confused with the PendingIntent Flags. The flags are used to control the notification. – Ayaanp Dec 28 '16 at 10:13

1 Answers1

6

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!

Nick Friskel
  • 2,369
  • 2
  • 20
  • 33