简体   繁体   中英

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

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!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM