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.

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.

  • NotificationCompat.Builder falta el método build ()
  • ¿Cómo programar las notificaciones locales de Android?
  • La notificación con setGroupSummary (true) no está visible en Android N
  • Android, qué indicadores de intención se recomiendan para Actividades iniciadas por notificaciones
  • ¿Cómo puedo convertir a Color a Bitmap?
  • GCM defaultSenderID
  • Evitar los sonidos de notificación múltiple android
  • android: mostrar la notificación en un momento específico?
  • Pérdida de memoria android en el servicio de notificación
  • Crear notificación cronometrada (por ejemplo, para eventos) en Android
  • ¿Cómo puedo crear una notificación en la barra de estado de android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.