Mostrar una alerta o una vista al recibir una notificación
Seguí este tutorial para mostrar una notificación en un dispositivo Android . Cuando ejecuté la aplicación en el dispositivo, un icono apareció en la barra de estado (como suele aparecer en el dispositivo Android) que es absolutamente perfecto. Pero sólo por curiosidad quería saber que puedo mostrar una alerta o alguna vista con pocos detalles cuando el dispositivo recibe una notificación? Quiero implementar este concepto en mi próxima aplicación.
Alguna muestra me ayudaría mucho.
- ¿Cómo puedo activar / desactivar "Mostrar notificación" mediante programación en android
- Android: Cómo distinguir CLEAR todos los eventos de la barra de notificaciones de la acción del usuario
- Android: obtener un identificador único de notificación
- ¿Es posible comprobar si una notificación es visible o cancelada?
- Notificación Haga clic en no iniciar la Actividad dada en los teléfonos Nexus
- ¿Dónde se muestran las notificaciones en Chrome en Android?
- Cómo restablecer notificationmanager número en notificación clara
- Android: determina si las notificaciones están desactivadas por el usuario
- Android: icono de notificación de la barra de estado incremental
- ¿Cómo puedo hacer una notificación en la barra de estado sin el mensaje expandido en la ventana "Notificaciones"? (sólo desea el icono)
- Notificaciones de la API REST de Google Drive no funcionan para cambios en la carpeta de aplicaciones
- Notificación de estilo de imagen grande de Android con texto de resumen de líneas múltiples
- NotificationCompat android - cómo mostrar solo el icono grande sin pequeño
Un tipo típico de patrón sería para usted para registrar una cierta parte de su aplicación para "recibir", o escuchar, las intenciones específicas. De esta manera, su aplicación puede despertarse en cualquier momento arbitrario, ver la intención de la llamada y decidir cómo manejarla (ya sea iniciando la aplicación completa, mostrando un diálogo o algo más). Una cosa buena que va junto con esto es utilizar el AlarmManager para establecer una alarma que disparará y despertar su aplicación en el futuro (actualizaciones periódicas).
¿Esto responde a su pregunta? He hecho algo como esto en mi aplicación y puedo ayudarle con el código si lo desea.
EDIT para implementar esto haría una clase java que amplíe BroadcastReceiver o IntentService (dependiendo si desea que la clase se ejecute en el subproceso ui o como un servicio, respectivamente). En mi ejemplo a continuación, he definido mi propia clave de acción de intención, pero normalmente se debería comprobar la acción con intention.getAction ():
public class QueryService extends IntentService { public final static String SERVICE_NAME = "QueryService"; // incoming flags public final static String FLAG_ACTION = "R_ACTION"; public final static String FLAG_EVENTS_RETURNED = "R_EVENTS"; public final static String FLAG_EVENTS_ARCHIVED_RETURNED = "R_EVENTS_ARCH"; public final static String FLAG_SHARED_PREFERNCES_RETURNED = "R_PREFS"; // outgoing flags public final static String RETURN_EVENTS = "RETURN_E"; public final static String RETURN_EVENTS_ARCHIVED = "RETURN_E_A"; public final static String RETURN_SHARED_PREFS = "RETURN_S_P"; public QueryService() { super(SERVICE_NAME); } protected void onHandleIntent(Intent intent) { String rAction = intent.getStringExtra(FLAG_ACTION); boolean rEvents = intent.getBooleanExtra(FLAG_EVENTS_RETURNED, true); boolean rEventsArchived = intent.getBooleanExtra(FLAG_EVENTS_ARCHIVED_RETURNED, true); boolean rSharedPrefs = intent.getBooleanExtra(FLAG_SHARED_PREFERNCES_RETURNED, true); if(rAction == null){ Log.e(SERVICE_NAME, "no return action specified, exiting..."); return; } Log.i(SERVICE_NAME, "Caller: " + rAction); DroidTaskApplication app = (DroidTaskApplication)getApplicationContext(); Intent resultsIntent = new Intent(rAction); // TODO assembling events / archived events from a database needs // a function that gets the complete event instead of just its headers // assemble event objects and insert them if(rEvents){ List<Event> liteEvents = app.edo.getAllEvents(); if(liteEvents != null){ for(Event e : liteEvents){ int id = e.getId(); e.setAlarms(app.edo.getAlarmsById(id)); e.setSubtasks(app.edo.getSubtasksById(id)); e.setNotes(app.edo.getNotesById(id)); } } resultsIntent.putExtra(RETURN_EVENTS, (Serializable)liteEvents); } // assemble archived event objects and insert if(rEventsArchived){ List<Event> liteEventsA = app.edo.getAllArchivedEvents(); resultsIntent.putExtra(RETURN_EVENTS_ARCHIVED, (Serializable)liteEventsA); } // collect the shared data and send it if(rSharedPrefs){ SharedPreferences prefs = getSharedPreferences(getString(R.string.PREFS_FILE_NAME), MODE_WORLD_READABLE); resultsIntent.putExtra(RETURN_SHARED_PREFS, (Serializable)(prefs == null? null : prefs.getAll())); } Log.i(SERVICE_NAME, "returning results"); // send everything to the caller sendBroadcast(resultsIntent); } }
Independientemente de si la clase es un servicio o un receptor de radiodifusión, debe registrarlo con la aplicación como un "receptor" (lo que significa que puede aceptar difusiones intencionales de algún tipo); Esto se puede hacer en código Java o en el manifiesto de Android. Un ejemplo que utilizo para ese servicio en el manifiesto está abajo (aunque mi clase Java no se preocupa, acerca de la acción intencional aún ):
<!-- Notification Launcher --> <receiver android:name="edu.clarkson.dtask.BK.NotificationReceiver" android:enabled="true"> <intent-filter> <action android:name="edu.clarkson.dtask.BK.NotificationReceiver.DISPATCH_ALARM" /> <action android:name="edu.clarkson.dtask.BK.NotificationReceiver.CANCEL_ALARM" /> </intent-filter> </receiver>
Diferentes acciones del sistema y notificaciones serán transmitidas por el sistema operativo cuando cambie un estado determinado; Si desea oír hablar de estos cambios, registra un broadcastreceiver o intentservice de la misma manera que en el manifiesto para una acción de Intent diferente (como ACTION_BATTERY_STATE_CHANGED). Toda la documentación se puede encontrar en el sitio de desarrollo de Android . Espero que te ayude a empezar en el camino correcto.
- Filtrado SPINNER para los datos XML que se habían recuperado
- Java.lang.RuntimeException: Error al entregar el resultado ResultInfo mientras se registra usando Facebook