remote - quitar notificacion sin servicio de datos android
Ícono de servicio persistente en la barra de notificaciones (2)
Sé que esta es una pregunta antigua, pero fue la primera en una página de resultados de Google, así que agregaré información para ayudar a otros.
Notificaciones persistentes
El truco es agregar .setOngoing a su NotificationCompat.Builder
Botón de cierre
Un botón que abre la aplicación y cierra el servicio requiere un PendingIntent
Un ejemplo
Este ejemplo muestra una notificación persistente con un botón de cierre que sale de la aplicación.
MyService
:
private static final int NOTIFICATION = 1;
public static final String CLOSE_ACTION = "close";
@Nullable
private NotificationManager mNotificationManager = null;
private final NotificationCompat.Builder mNotificationBuilder = new NotificationCompat.Builder(this);
private void setupNotifications() { //called in onCreate()
if (mNotificationManager == null) {
mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
}
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
new Intent(this, MainActivity.class)
.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP),
0);
PendingIntent pendingCloseIntent = PendingIntent.getActivity(this, 0,
new Intent(this, MainActivity.class)
.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP)
.setAction(CLOSE_ACTION),
0);
mNotificationBuilder
.setSmallIcon(R.drawable.ic_notification)
.setCategory(NotificationCompat.CATEGORY_SERVICE)
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setContentTitle(getText(R.string.app_name))
.setWhen(System.currentTimeMillis())
.setContentIntent(pendingIntent)
.addAction(android.R.drawable.ic_menu_close_clear_cancel,
getString(R.string.action_exit), pendingCloseIntent)
.setOngoing(true);
}
private void showNotification() {
mNotificationBuilder
.setTicker(getText(R.string.service_connected))
.setContentText(getText(R.string.service_connected));
if (mNotificationManager != null) {
mNotificationManager.notify(NOTIFICATION, mNotificationBuilder.build());
}
}
MainActivity
debe manejar los intentos cercanos.
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
String action = intent.getAction();
if (action == null) {
return;
}
switch (action) {
case MyService.CLOSE_ACTION:
exit();
break;
}
}
private void exit() {
stopService(new Intent(this, MyService.class));
finish();
}
AnotherActivity
debe estar finalizado y enviar un intento de salida a MainActivity
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
String action = intent.getAction();
if (action == null) {
return;
}
switch (action) {
case MyService.CLOSE_ACTION:
exit();
break;
}
}
/**
* Stops started services and exits the application.
*/
private void exit() {
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.setAction(Stn1110Service.CLOSE_ACTION);
startActivity(intent);
}
¿Alguien puede indicarme recursos o tutoriales?
http://developer.android.com/training/notify-user/build-notification.html
Estoy intentando descubrir cómo mostrar que mi servicio se está ejecutando con un ícono de notificación persistente. Muchos ejemplos que he encontrado solo envían un mensaje descartable a la barra de notificaciones. Quería un icono persistente que cuando se abre la barra de notificaciones muestra que el servicio se está ejecutando y puede hacer clic en él para abrir la aplicación y cerrar el servicio.
¿Alguien puede indicarme recursos o tutoriales sobre cómo lograr esto? Cualquier APK está bien, pero me gustaría trabajar con 4.0 o más.
Gracias.
debe ser lo mismo que un mensaje desechable, excepto que cambies la bandera.
Notificación.FLAG_ONGOING_EVENT
en lugar de
Notificación.FLAG_AUTO_CANCEL
Cuando se hace clic en una notificación, se ejecuta la intención que envía, de modo que se asegura de que Activity realice la tarea que desee.
private void showRecordingNotification(){
Notification not = new Notification(R.drawable.icon, "Application started", System.currentTimeMillis());
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, main.class), Notification.FLAG_ONGOING_EVENT);
not.flags = Notification.FLAG_ONGOING_EVENT;
not.setLatestEventInfo(this, "Application Name", "Application Description", contentIntent);
mNotificationManager.notify(1, not);
}