Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


La notificación creada por IntentService utiliza siempre una intención incorrecta

Problema

Cuando el usuario presiona Enviar "Botón 1" (desplácese hacia abajo para ver la construcción de la aplicación) se crea una nueva Notification desde el RefreshService . Si el usuario presiona esta notificación, se MainActivity una instancia de MainActivity y recibe una String con el valor Button 1 sobre el Intent .

Este valor se muestra.

Cuando el usuario presiona ahora el botón de envío "2", se crea una nueva Notification desde RefreshService . Si el usuario presiona esta notificación, una instancia de MainActivity se inicia y recibe una String ALSO con el valor Button 1 sobre el Intent .

Así como usted puede adivinar, normalmente debe haber el valor Button 2 .

Cuando el primer botón que el usuario presionó fue Enviar "Botón 2", entonces siempre se enviaría el Button 2 .

La única solución para obtener el valor del segundo botón es reiniciar el teléfono y presionar el segundo botón primero. Incluso el cierre de la fuerza 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 la 'MainActivity' con otro Intent para que el enfoque sea el mismo.

Construcción

  • Una Activity llamada MainActivity

  • Un IntentService llamado RefreshService

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); } } 

RefreshService

 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
Diseño de la aplicación

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.