Cancelar notificación dinámica en Android cuando se selecciona la notificación
Supongamos que estoy creando una aplicación de Android que es como una aplicación de SMS. Los requisitos son los siguientes:
- El usuario puede recibir múltiples notificaciones, cada una con un ID dinámico de tipo int.
- Cuando se selecciona una notificación, carga una actividad que muestra un mensaje correspondiente (el SMS).
- La notificación única que se seleccionó debe descartarse automáticamente.
Mi idea de cómo manejar esto era usar putExtra para agregar el ID entero a la intención, que entonces sería accesible desde la intención dentro de la actividad que carga, lo que descartaría la notificación que lo llamó.
- Intercepción de SMS de Android sin icono de notificación o mensajes WAP-PUSH
- Android: descarga el archivo desde el servidor y muestra el progreso de la descarga en la barra de notificación mediante AsyncTask
- Notificación incorrecta enviada desde el paquete, no se pudo expandir RemoteViews
- Notificación de Android en el momento
- Acceso a la configuración de Android NotificationListenerService
Para mi caso de prueba, he aquí las especificaciones:
- Eventualmente se generarán notificaciones a partir de un servicio, por ahora se generan cuando el usuario de prueba presiona un botón.
- Cuando se selecciona una notificación, la actividad llamada toasts el mensaje, a continuación, intenta descartar la notificación. (En aras de la visibilidad)
Aquí están mis problemas:
- Cuando se selecciona la primera notificación, es correcta. Se desestima la notificación.
- Cuando se selecciona cada notificación sucesiva, se muestra el ID de la primera notificación y no se descarta nada.
- Soy un novato de Java, más acostumbrado a los lenguajes de scripting (como Perl, PHP, etc) 🙂
Aquí está mi fuente:
<?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" android:orientation = "vertical" android:layout_width = "fill_parent" android:layout_height = "fill_parent" > <Button android:id="@+id/create_notification" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="10dp" android:text = "Create new notification" />
package org.test.notifydemo; import android.app.Activity; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; import java.util.Random; public class aRunNotificationDemo extends Activity { private NotificationManager mNotificationManager; @Override public void onCreate( Bundle icicle ) { super.onCreate( icicle ); setContentView( R.layout.run_notify_demo ); mNotificationManager = (NotificationManager) getSystemService( aRunNotificationDemo.NOTIFICATION_SERVICE ); int close_notify_id = getIntent().getIntExtra( "notification_id", 0 ); if ( close_notify_id != 0 ) { Toast.makeText( aRunNotificationDemo.this, "Dimissing this notification: " + Integer.toString(close_notify_id), Toast.LENGTH_SHORT ).show(); mNotificationManager.cancel( close_notify_id ); } findViewById( R.id.create_notification ).setOnClickListener( new MyButtonListener() ); } private class MyButtonListener implements Button.OnClickListener { public void onClick( View my_view ) { Random randGen = new Random(); int notify_id = randGen.nextInt(); int icon = R.drawable.icon_notification_01; CharSequence tickerText = Integer.toString(notify_id) + " New SMS!"; long when = System.currentTimeMillis(); Notification my_notification = new Notification(icon, tickerText, when); Context context = getApplicationContext(); CharSequence contentTitle = Integer.toString(notify_id) + " New SMS Available!"; CharSequence contentText = Integer.toString(notify_id) + " There is a new SMS available."; Intent notificationIntent = new Intent( aRunNotificationDemo.this, aRunNotificationDemo.class ); notificationIntent.putExtra( "notification_id", notify_id ); PendingIntent contentIntent = PendingIntent.getActivity( aRunNotificationDemo.this, 0, notificationIntent, 0 ); my_notification.setLatestEventInfo( context, contentTitle, contentText, contentIntent ); mNotificationManager.notify( notify_id, my_notification ); } } }
- Mostrar siempre servicio en la barra de notificación
- Cómo crear ListView con la ayuda de remoteview?
- Eliminar notificación de la barra de notificación de otras aplicaciones
- Cómo utilizar Phonegap Android Plugin de notificación local
- Cómo comprobar si mi aplicación tiene permiso para mostrar la notificación
- Notificaciones de Toast que no aparecen en Nexus 7 Tablet
- Clic de notificación: actividad ya abierta
- ¿Cómo puedo mantener la notificación de Android abierta hasta que se cierre mi aplicación?
Cuando se crea una actividad, se onCreate()
su método onCreate()
. La próxima vez que se muestre el método no es necesariamente llamado. Intente mover el código que elimina la notificación al método onResume()
. Familiarícese con el ciclo de vida de la actividad.
Y por cierto es más fácil de lo que piensas:
http://developer.android.com/reference/android/app/Notification.html#FLAG_AUTO_CANCEL
my_notification.flags |= Notification.FLAG_AUTO_CANCEL;
Ponga el código de arriba al crear una Notification
.
- Cómo buscar videos con la API de datos de YouTube en Android
- Android: escucha para detectar cambios en las propiedades de una vista (por ejemplo, android: layout_marginTop)