4 Stimmen

Android: Abfangen des Anwendungsendes

Ich baue gerade eine App, die Töne abspielt. Wenn ein Benutzer einen Ton startet, zeige ich eine Statusleiste Benachrichtigung mit diesem Code:

notificationManager = (NotificationManager) activity.getSystemService(Activity.NOTIFICATION\_SERVICE);

Intent intent = new Intent(activity, MyActivity.class);
intent.setFlags(Intent.FLAG\_ACTIVITY\_CLEAR\_TOP | Intent.FLAG\_ACTIVITY\_SINGLE\_TOP);

PendingIntent pendingIntent = PendingIntent.getActivity(activity, 0, intent, 0);

notification = new Notification();
notification.icon = android.R.drawable.stat\_notify\_sync;
notification.flags |= Notification.FLAG\_ONGOING\_EVENT;

String title = activity.getString(R.string.notification\_title);
String text = activity.getString(R.string.notification\_text);

notification.setLatestEventInfo(activity, title, text, pendingIntent);

Das funktioniert gut. Später, wenn der Benutzer alle Töne stoppt, verwende ich notificationManager.cancel, um die Benachrichtigung zu entfernen, und wieder, dies funktioniert gut.

Mein Problem ist, dass ich den Fall behandeln möchte, dass jemand eine Task-Killer-App verwendet. Wenn jemand eine solche App verwendet, um meine Anwendung zu beenden, möchte ich, dass das Benachrichtigungssymbol aus der Statusleiste entfernt wird. Ich weiß, dass viele Benutzer diese Art von Apps gerne verwenden, und ich möchte nicht, dass sich einige darüber beschweren, dass sie meine App nicht "schließen" können!

Bisher konnte ich noch nicht erkennen, wann die App beendet wird. Ich habe Folgendes versucht:

Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler()
{
  @Override
  public void uncaughtException(Thread thread, Throwable ex)
  {
    notificationManager.cancel(NOTIFICATION\_ID);
  }
});

Und auch dies:

Runtime.getRuntime().addShutdownHook(new Thread()
{
  @Override
  public void run()
  {
     notificationManager.cancel(NOTIFICATION\_ID);              
  }
});

Aber das funktioniert nicht. Wenn meine App beendet wird, ist das Benachrichtigungssymbol immer noch da. Um meine Anwendung zu beenden, habe ich eine Anwendung namens "Advanced Task Killer" verwendet. Ich habe auch getestet, indem ich meinen Prozess in DDMS beendete.

Ich habe festgestellt, dass der native Media Player dies tut. Wenn eine Musik abgespielt wird und Sie den Musikdienst beenden, verschwindet das Symbol.

Gibt es also eine Möglichkeit zu erkennen, wann eine Anwendung beendet wird, so dass ich das Benachrichtigungssymbol entfernen kann? Oder gibt es eine Möglichkeit, dass das Benachrichtigungssymbol automatisch entfernt wird, wenn meine Anwendung beendet wird?

Danke!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X