我目前正在構建一個將播放聲音的應用程序。當用戶啓動聲音時,我使用此代碼顯示狀態欄通知:Android:捕捉應用程序出口
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);
這工作正常。稍後,如果用戶停止了所有聲音,我使用notificationManager.cancel刪除通知,並且再次,這工作正常。
我的問題是,我想處理使用任務殺手應用程序的人的情況。如果有人使用其中一個來殺死我的應用程序,我希望將通知圖標從狀態欄中刪除。我知道很多用戶喜歡使用這些類型的應用程序,我不希望有人抱怨他們無法「關閉」我的應用程序!
到目前爲止,我還沒有能夠檢測到應用何時退出。我已經試過這樣:
Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { @Override public void uncaughtException(Thread thread, Throwable ex) { notificationManager.cancel(NOTIFICATION_ID); } });
而且也是這樣:
Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { notificationManager.cancel(NOTIFICATION_ID); } });
但是,這是行不通的。當我的應用程序被殺時,通知圖標仍然存在。爲了殺死我的應用程序,我一直在使用名爲「高級任務殺手」的應用程序。我也通過在DDMS中殺死我的進程來進行測試。
我注意到,本地媒體播放器正在這樣做。如果音樂正在播放並且您殺死了音樂服務,該圖標將會消失。
那麼,有沒有辦法檢測應用程序即將退出的時間,以便我可以刪除通知圖標?或者有沒有辦法讓通知圖標自動刪除,如果我的應用程序被殺害?
謝謝!
您的應用程序只能管理通知。當應用程序被終止時,它不再執行任何操作,即使像'application.onTerminate()'這樣的東西也不會被調用。您必須找到一種方法來立即重新啓動您的服務,然後管理您的通知或標記您的通知,以便系統在您的應用程序不再運行時將其刪除。 –