Search code examples
androidandroid-widgetandroid-serviceandroid-pendingintent

PendingIntent to launch and stop a Service


I'm trying to make a simple widget with a button that start a Service with the OnClickPendingIntent(). I can start it fine but I can't figure out a way to stop it (I know I can do it with a BroadcastReceiver or something similar but I would like to avoid hardcode).

This is my code:

        Intent intent = new Intent(context, myService.class);
        PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);

        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.my_widget);

        if (!ismyserviceup(context)) {
            views.setOnClickPendingIntent(R.id.my_button, pendingIntent);
        } else {
            // i need to stop it!!!!
        }

Solution

  • There are multiple ways to do this, here's one:

        Intent intent = new Intent(context, myService.class);
    
        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.my_widget);
    
        if (ismyserviceup(context)) {
            intent.setAction("STOP");
        }
        PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);                
        views.setOnClickPendingIntent(R.id.my_button, pendingIntent);
    

    Then on the service's onStartCommand(), you can check the intent action for "STOP" (you should probably use a better string) and call stopSelf().