Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo cancelar la notificación de inesperado / forzar la terminación de la aplicación

Estoy creando una aplicación que muestra la notification de la canción actual.

La canción se está reproduciendo a través de Service y la iniciación y cancelación de la notificación se realiza en el propio servicio.

Pero si la aplicación se termina por alguna excepción o si la fuerza cerrarlo a través del administrador de tareas, la notificación permanece en la parte superior de la barra de tareas.

¿Cómo puedo eliminar esto.

A continuación se muestra el código:

 //In Service onStartCommand(), there is a call to initiatePlayback() private void initiatePlayback() { try { if (mPlayer.isPlaying()) { mPlayer.stop(); } mPlayer.reset(); mPlayer.setDataSource(currentData); mPlayer.prepare(); if (reqAudioFocus()) { mPlayer.start(); } if (mPlayer.isPlaying()) { initNotification(); } } catch (Exception e) { Toast.makeText(this, "PlayTrack->initiatePlayback(): " + e.toString(), Toast.LENGTH_SHORT).show(); } } @Override public void onDestroy() { stopPlayback(); mPlayer.release(); mPlayer = null; super.onDestroy(); } private void stopPlayback() { if (mPlayer.isPlaying()) { mPlayer.stop(); mPlayer.reset(); cancelNotification(); } } private void cancelNotification() { String ns = Context.NOTIFICATION_SERVICE; NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns); mNotificationManager.cancel(NOTIFICATION_ID); } 

4 Solutions collect form web for “Cómo cancelar la notificación de inesperado / forzar la terminación de la aplicación”

Coge la excepción y en la cláusula catch cancela:

 mNotificationManager.cancel(MY_NOTIFICATION_ID); 

Sé que esta pregunta es vieja, pero la encontré cuando creí tener un problema similar. Resultó que para mí, el servicio se estaba matando junto con la aplicación (que correctamente canceló la notificación en onDestroy), pero luego se estaba reiniciando (como debería con START_STICKY) y la notificación se está publicando de nuevo. En estos casos no quería que el servicio volviera hasta que el usuario lo iniciara desde la aplicación, así que en OnStartCommand llamé stopSelf () cuando la intención entrante era null.

Puede anular el método onDestroy() y utilizar NotificationManager para cancelar su notificación. Sólo necesita proporcionar su ID de la notificación que debe cancelarse.

 @Override public void onDestroy() { private static final int MY_NOTIFICATION_ID= 1234; String ns = Context.NOTIFICATION_SERVICE; NotificationManager mNotificationManager; mNotificationManager = (NotificationManager) getSystemService(ns); mNotificationManager.notify(MY_NOTIFICATION_ID, notification); //to cancel: mNotificationManager.cancel(MY_NOTIFICATION_ID); } 

Puede detectar los errores que interrumpen su aplicación con:

 Thread.setDefaultUncaughtExceptionHandler(newHandler); 

Tenga en cuenta que al hacer esto no podrá cerrar su aplicación después de una excepción, por lo que necesita obtener la referencia antigua de exceptionHandler y llamarla desde la suya.

Además, agregue el código para eliminar la notificación sobre este método.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.