estaba siguiendo this tutorial para mostrar una notificaciónen un dispositivo Android . Cuando ejecuté la aplicación en el dispositivo, apareció un ícono en la barra de estado (como suele aparecer en el dispositivo Android) que es absolutamente perfecto. Pero, por curiosidad, quería saber si puedo mostrar una alerta o una vista con pocos detalles cuando el dispositivo recibe una notificación. Quiero implementar este concepto en mi próxima aplicación.
Alguna muestra me sería de gran ayuda.Mostrar una alerta o una vista sobre la recepción de una notificación
Respuesta
Un tipo típico de patrón sería que usted registre una determinada parte de su aplicación para "recibir", o escuchar, intenciones específicas. De esta forma, su aplicación puede activarse en cualquier momento arbitrario, observar el intento de llamada y decidir cómo manejarla (ya sea iniciando la aplicación completa, mostrando un diálogo u otra cosa). Una buena cosa que va de la mano con esto es usar el AlarmManager para configurar una alarma que activará y reactivará su aplicación en el futuro (actualizaciones periódicas).
¿Responde a esta pregunta? He hecho algo como esto en mi aplicación y puedo ayudarte con el código si quieres.
EDITAR para implementar este que haría una clase Java que se extiende ya sea BroadcastReceiver o IntentService (dependiendo de si desea que la clase se ejecute en el hilo de interfaz de usuario o como un servicio, respectivamente). En mi siguiente ejemplo, he definido mi propia tecla de acción intención, pero por lo general se comprobaría la acción con intent.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 receptor del servicio o de transmisión, debe registrarlo con la aplicación como un "receptor" (lo que significa que puede aceptar emisiones de intención 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á por debajo (aunque mi clase de Java no se preocupa, sobre la acción intención todavía):
<!-- 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 y notificaciones del sistema serán transmitidos por el sistema operativo cuando un cierto estado cambia; si desea recibir información sobre estos cambios, registra un receptor de transmisión o un servicio intencionado de la misma manera que en el manifiesto para una acción de intención diferente (como ACTION_BATTERY_STATE_CHANGED). Toda la documentación se puede encontrar en el android dev site. Espero que eso te ayude a comenzar en el camino correcto.
Sí, por favor. Sería muy útil. –
He editado mi respuesta para incluir algunos ejemplos de código y uso para que pueda comenzar. – Blaskovicz
- 1. Mostrar una WinForm sobre el área de notificación
- 2. Obtenga una notificación sobre un cambio de página en UIWebView
- 3. ¿Hay una biblioteca para notificación/alerta en .NET?
- 4. Mostrar una notificación solo si la actividad no muestra
- 5. Mostrar vista en una vista de desplazamiento en la pantalla
- 6. cómo mostrar la lista de alertas de notificación una por una de la actividad?
- 7. ¿Cómo puedo mostrar una vista como una superposición de otra?
- 8. ¿Cómo puedo personalizar una vista de alerta de iOS?
- 9. Recibir notificación sobre una terminación de proceso Java
- 10. Mostrar una información sobre herramientas sobre una celda en una JTable
- 11. hacer una alerta en keyup sólo si la clave es una letra o número
- 12. JCheckbox change listener recibe una notificación de mouse sobre eventos
- 13. Cómo recibir una notificación cuando se notifica una notificación
- 14. Incoherencia en la recepción de la notificación de inserción
- 15. Mostrar una vista es muy lento en CTCallCenter callEventHandler
- 16. Cómo mostrar/ocultar una vista en EmberJS
- 17. Android botones flotantes sobre una vista
- 18. ¿Cómo mostrar una notificación emergente al usuario que usa jquery?
- 19. ¿NSViewController recibe una notificación cuando se agrega o elimina su vista?
- 20. ¿Hay alguna manera de mostrar una excepción personalizada en una alerta en Android?
- 21. ¿Hay alguna forma de descartar una vista de alerta automáticamente después de un tiempo?
- 22. Vista de notificación personalizada
- 23. recibido una alerta fatal: bad_certificate
- 24. ¿Qué formas hay para mostrar una notificación de escritorio desde una aplicación web?
- 25. Programar mostrar información sobre herramientas después de una llamada ajax
- 26. ¿Se está realizando una notificación o detección de una captura de pantalla?
- 27. Mostrar una superposición de "ayuda" sobre un diseño de Android
- 28. Mostrando una vista de alerta con un cuadro de texto en el iPhone
- 29. Mostrar texto dinámico en una vista de Android
- 30. Obtenga una notificación sobre el cambio de la interfaz de red en Linux
He hecho una solución. Compruebe esta imagen: http://img854.imageshack.us/img854/1522/previewglobaldialog.png –