我一直在爲此奮鬥了一個多星期,所以任何幫助將不勝感激。正在取消正在進行的事件Android通知
我有一個Activity開始媒體播放服務。一旦開始播放,在服務啓動一個持續的,不可撤銷的通知,如:
realIntent = new Intent(this, EpisodeViewer.class);
realIntent.putExtra("show_name", showName);
realIntent.putExtra("episode_name", episodeName);
pendingIntent = PendingIntent.getActivity(this, 0, realIntent, 0);
note =
new Notification(
R.drawable.ic_notification_bcn,
episodeName,
System.currentTimeMillis());
note.flags =
note.flags |
Notification.FLAG_FOREGROUND_SERVICE |
Notification.FLAG_NO_CLEAR |
Notification.FLAG_ONGOING_EVENT;
note.setLatestEventInfo(this, "", episodeName, pendingIntent);
note.contentView =
new RemoteViews(
getApplicationContext().getPackageName(),
R.layout.episode_player_note);
note.contentView.setImageViewResource(
R.id.player_note_icon,
R.drawable.ic_notification_bcn);
note.contentView.setTextViewText(
R.id.player_note_text,
episodeName);
note.contentView.setProgressBar(
R.id.player_note_progress, 100, 0, false);
noteManager.notify(MEDIA_PLAYER_NOTIFY_ID, note);
這工作得很好。當用戶切換播放其他內容時(通過活動的用戶界面),服務會更新通知(使用上述相同方式)更改名稱並重新設置進度欄。這工作得很好。隨着媒體的進展,通知更新中的進度條也會起作用。
但是當媒體結束或用戶想要停止,該服務將嘗試取消的通知與
noteManager.cancel(MEDIA_PLAYER_NOTIFY_ID);
但這被忽略。在DDMS日誌中沒有錯誤,但是從我的跟蹤中我確實知道取消正在被調用。我已經嘗試在取消通知之前取消PendingIntent,但這沒有任何區別。我也嘗試用「空白」替換通知 - 清除進度和名稱 - 然後取消。新的「已清除」通知顯示,但仍然不會取消。
那麼我在這裏錯過了什麼?是否還有其他需要完成的操作來取消我缺少的FOREGROUND或NO_CLEAR或ONGOING通知?我已經用2.1和2.2下的Emulator和2.3下的我的硬件試過了,所有這些都表現出完全相同的行爲。
我擺脫FLAG_FOREGROUND_SERVICE'的',或者嘗試通過使用擺脫'Notification'的'stopForeground ()'。 – CommonsWare
刪除FLAG_FOREGROUND_SERVICE標誌允許我取消通知。很好,謝謝! – Jim