Deseo implementar el método startForeground()
en la clase Service
para evitar el auto matado del servicio.Implementar el método startForeground en Android
¿Alguien me ha enviado el código para implementar este método?
Deseo implementar el método startForeground()
en la clase Service
para evitar el auto matado del servicio.Implementar el método startForeground en Android
¿Alguien me ha enviado el código para implementar este método?
Jovan, aquí es un método para hacer el código compatible para 2.0+ y de 1,6 (el código se muestra cómo detectar cuál es compatible) http://android-developers.blogspot.com/2010/02/service-api-changes-starting-with.html
Para 2.0+, puse a algunos código de ejemplo (usando startForeground). Observe que algún código ahora está en desuso, sin embargo, Notification.Builder usa API nivel 11 (3.x) lo que significa que no usaré eso hasta que la mayoría de los teléfonos usen una versión compatible de Android. Dado que la gran mayoría de los teléfonos ahora está ejecutando alguna versión de 2.x, creo que es lo suficientemente seguro como para omitir la verificación de compatibilidad.
final static int myID = 1234;
//The intent to launch when the user clicks the expanded notification
Intent intent = new Intent(this, SomeActivityToLaunch.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendIntent = PendingIntent.getActivity(this, 0, intent, 0);
//This constructor is deprecated. Use Notification.Builder instead
Notification notice = new Notification(R.drawable.icon_image, "Ticker text", System.currentTimeMillis());
//This method is deprecated. Use Notification.Builder instead.
notice.setLatestEventInfo(this, "Title text", "Content text", pendIntent);
notice.flags |= Notification.FLAG_NO_CLEAR;
startForeground(myID, notice);
Pon este código dentro de onStartCommand()
de su servicio y ya está bueno para ir. (Pero podría poner esta sección de código en cualquier parte de su servicio).
P.S. para evitar que el servicio esté en primer plano, simplemente use stopForeground(true);
en cualquier lugar de su servicio
Yo Busco implementación de startForeground en android 2.0, el ejemplo es para la implementación anterior al nivel 5 de API. Gracias – Jovan
¿Qué hace el ID? –
No estoy muy seguro de si esto es lo que estás buscando, pero todo lo que tiene que hacer es crear un objeto de notificación (mOngoingNote
abajo) y llamar startForeground
mediante un identificador de notificación junto con el notificación real
startForeground(NOTEMAN_ID, mOngoingNote);
Este código utilizará la mejor opción disponible para cualquier API agregando la biblioteca de soporte de Android a su proyecto. En Eclipse, haga clic con el botón derecho en el proyecto, vaya a Herramientas de Android y haga clic en la opción "Agregar biblioteca de soporte ..." para descargarlo y agregarlo.
final static int myID = 1234;
//The intent to launch when the user clicks the expanded notification
Intent intent = new Intent(this, SomeActivityToLaunch.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendIntent = PendingIntent.getActivity(this, 0, intent, 0);
if (Integer.parseInt(Build.VERSION.SDK) >= Build.VERSION_CODES.DONUT) {
// Build.VERSION.SDK_INT requires API 4 and would cause issues below API 4
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setTicker("TICKER").setContentTitle("TITLE").setContentText("CONTENT")
.setWhen(System.currentTimeMillis()).setAutoCancel(false)
.setOngoing(true).setPriority(Notification.PRIORITY_HIGH)
.setContentIntent(pendIntent);
Notification notification = builder.build();
} else {
Notification notice = new Notification(R.drawable.icon_image, "Ticker text", System.currentTimeMillis());
notice.setLatestEventInfo(this, "Title text", "Content text", pendIntent);
}
notification.flags |= Notification.FLAG_NO_CLEAR;
startForeground(myID, notification);
poner el código en el método de inicio que está utilizando para su servicio, a continuación, cuando se desea que el proceso en primer plano para detener, llame stopForeground(true);
cualquier lugar de su servicio
Olvidaste 'builder.setSmallIcon (int)'. Sin ese creador personalizado se ignorará con la notificación predeterminada. –
La pregunta no era sobre cómo implementar una notificación personalizada. Era cómo usar el método startForeground().Lo que haces más allá de eso es tu preferencia personal. – LoungeKatt
¿Por qué es necesario establecer FLAG_NO_CLEAR para un servicio que se ejecuta en primer plano? ¿Hay alguna forma de "borrar" la notificación de un servicio en primer plano? Sé que AUTO_CANCEL [no funciona] (http://stackoverflow.com/questions/4561521/android-notification-flag-auto-cancel-not-working). – Eduardo
¿Por qué no utilizar la compatibilidad del generador de notificaciones proporcionada en la biblioteca de soporte para obtener las ventajas de la nueva API, mantener la compatibilidad y no escribir el código obsoleto? – LoungeKatt
@TwistedUmbrella: Android estaba (todavía) evolucionando ... en el momento de la redacción, la biblioteca de soporte de Android no proporcionaba esta capacidad. –