【发布时间】:2011-12-30 22:43:54
【问题描述】:
我目前正在构建一个可以播放声音的应用。当用户启动声音时,我会使用以下代码显示状态栏通知:
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.icon = android.R.drawable.stat_notify_sync; notification.flags |= Notification.FLAG_ONGOING_EVENT; 字符串标题 = activity.getString(R.string.notification_title); 字符串文本 = activity.getString(R.string.notification_text); notification.setLatestEventInfo(activity, title, text, pendingIntent);这工作正常。稍后,如果用户停止所有声音,我使用 notificationManager.cancel 删除通知,再次,这工作正常。
我的问题是我想处理有人使用任务杀手应用程序的情况。如果有人使用一个来杀死我的应用程序,我希望从状态栏中删除通知图标。我知道很多用户喜欢使用这类应用,我不希望有人抱怨他们无法“关闭”我的应用!
到目前为止,我无法检测到应用程序何时将退出。我试过这个:
Thread.currentThread().setUncaughtExceptionHandler(新的 Thread.UncaughtExceptionHandler() { @覆盖 public void uncaughtException(线程线程,Throwable ex) { notificationManager.cancel(NOTIFICATION_ID); } });还有这个:
Runtime.getRuntime().addShutdownHook(新线程() { @覆盖 公共无效运行() { notificationManager.cancel(NOTIFICATION_ID); } });但这不起作用。当我的应用程序被杀死时,通知图标仍然存在。为了杀死我的应用程序,我一直在使用一个名为“Advanced Task Killer”的应用程序。我还通过在 DDMS 中终止我的进程来进行测试。
我注意到本机媒体播放器正在这样做。如果正在播放音乐并且您终止了音乐服务,则该图标将消失。
那么,有没有办法检测应用程序何时即将退出,以便我可以删除通知图标?或者如果我的应用程序被杀死,是否有办法自动删除通知图标?
谢谢!
【问题讨论】:
-
您的应用程序只能在运行时管理通知。当一个应用程序在那里被杀死时,它不再执行任何东西,即使像
application.onTerminate()这样的东西也不会被调用。您必须找到一种方法来立即重新启动您的服务,然后管理您的通知或标记您的通知,以便系统在您的应用程序不再运行时将其删除。
标签: android