La notificación creada por IntentService usa siempre una Intención incorrecta
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.
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