rosghub
rosghub

Reputation: 9264

Android Pending Intent to start service

So I have a service, in the onCreate() I setup 3 pending intents to start the same service, each having different extra data to specify the action. I'm creating a notification, and I want to use one pending intent as the click action, one as the dismiss action, and the third is for an alarm.

        Intent iCancel = new Intent(this, BootService.class);
        Intent iAlarm = new Intent(this, BootService.class);
        Intent iDismiss = new Intent(this, BootService.class);

        // each will have actions
        iAlarm.putExtra(INTENT_ACTION, INTENT_ALARM_FIRED);
        iCancel.putExtra(INTENT_ACTION, INTENT_CANCEL);
        iDismiss.putExtra(INTENT_ACTION, INTENT_DISMISS);

        PendingIntent piCancel = PendingIntent.getService(
                this,
                0,
                iCancel,
                Intent.FILL_IN_DATA);

        mPiAlarm = PendingIntent.getService(this, 0, iAlarm, Intent.FILL_IN_DATA);

        PendingIntent piDismiss = PendingIntent.getService(this, 0, iDismiss, Intent.FILL_IN_DATA);

        mNotifyBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.drawable.ic_action_about)
                .setContentTitle(getString(R.string.app_name))
                .setContentIntent(piCancel)
                .setDeleteIntent(piDismiss);

The problem is all pending intents seem that have the same intent extra data, so when onStartCommand is launched no matter whether the notification was clicked or dismissed or neither, constant INTENT_CANCEL is received from intent.getIntExtra(INTENT_ACTION)

I believe it has something to do with the flags used in PendingIntent.getService(), i'm confused about which to use. I've tried using PendingIntent.FLAG_CANCEL_CURRENT, and UPDATE_CURRENT, neither seem to fix the issue but the result is different, I receive constant INTENT_ALARM_FIRED for every action.

How can I get each pending intent to have its own intent extra data?

Solution

I discovered an exact warning about this scenario right in the PendingIntent doc. http://developer.android.com/reference/android/app/PendingIntent.html

just changed my request codes and it works

Upvotes: 0

Views: 4340

Answers (1)

tachyonflux
tachyonflux

Reputation: 20221

This has to do with Intents being considered the same. See PendingIntent for more information.

One way to get around this would be to just vary the requestCode for each Intent. (The 2nd parameter in the getService call)

Upvotes: 4

Related Questions