La notificación creada por IntentService usa siempre una Intención incorrecta

Problema

Cuando el usuario presionaEnviar "Botón 1"(desplácese hacia abajo para ver la construcción de la aplicación) una nuevaNotification se crea a partir de laRefreshService. Si el usuario pulsa esta notificación unMainActivity la instancia se inicia y recibe unaString con el valorButton 1 sobre elIntent.

Este valor se muestra.

Cuando el usuario presiona ahora elEnviar "Botón 2" un nuevoNotification se crea a partir de laRefreshService. Si el usuario pulsa esta notificación unMainActivity la instancia se inicia y recibe unaString ADEMÁS con el valorButton 1 sobre elIntent.

Así que como puedes adivinar, normalmente debería haber el valorButton 2.

Cuando el primer botón que presionó el usuario fueEnviar "Botón 2" entonces allí siempreButton 2 ser enviado.

La única solución para obtener el valor del segundo botón es reiniciar el teléfono y presionar primero el segundo botón. Incluso la fuerza de cierre no funciona.

Sé que también puedo cambiar la interfaz de usuario de otra manera. Pero necesito este enfoque en una aplicación donde necesito reiniciar 'MainActivity' con otraIntent por lo que el enfoque debe ser el mismo.

Construcción

A Activity llamadoMainActivity

A IntentService llamadoRefreshService

Actividad principal

public class MainActivity extends Activity implements View.OnClickListener {
    public static final String RECEIVED = "received";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ((TextView)findViewById(R.id.textView_received)).setText(getIntent().getStringExtra(RECEIVED));

        findViewById(R.id.button_1).setOnClickListener(this);
        findViewById(R.id.button_2).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Intent intent = new Intent(this, RefreshService.class);

        if(v.getId() == R.id.button_1){
            intent.putExtra(RECEIVED, "Button 1");
            Toast.makeText(this,"Sent \"Button 1\"",Toast.LENGTH_LONG).show();
        }
        else if(v.getId() == R.id.button_2){
            intent.putExtra(RECEIVED, "Button 2");
            Toast.makeText(this,"Sent \"Button 2\"",Toast.LENGTH_LONG).show();
        }

        startService(intent);
    }
}

Servicio de actualización

public class RefreshService extends IntentService {
    public RefreshService() {
        super("RefreshService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        String received = intent.getStringExtra(MainActivity.RECEIVED);

        Intent notificationIntent = new Intent(this, MainActivity.class);
        notificationIntent.putExtra(MainActivity.RECEIVED, received);
        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

        NotificationCompat.Builder builder = new NotificationCompat.Builder(this).setContentTitle("IntentServiceRefresh").setContentText(received).setSmallIcon(R.drawable.ic_notification_small).setContentIntent(pendingIntent);
        Notification notification = builder.build();

        // Hide the notification after it's selected
        notification.flags |= Notification.FLAG_AUTO_CANCEL;

        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0, notification);
    }
}

Diseño de la aplicación

Respuestas a la pregunta(1)

Su respuesta a la pregunta