2012-07-17 49 views
7

我有一個服務,它爲網站提供數據,然後在必要時給用戶一個通知。一旦服務結束,通知就消失

我遇到的問題是,服務關閉後(即時可能)通知消失。下面的代碼是應用程序所有的通知代碼。我沒有輸入任何代碼來取消通知。

public static void CreateNotificationCompat(int notificationID, String link, String title, String text, Context ctx) 
{ 
    Intent notificationIntent = new Intent("android.intent.action.VIEW", Uri.parse(link)); 
    PendingIntent contentIntent = PendingIntent.getActivity(ctx.getApplicationContext(), 0, notificationIntent, 0); 

    NotificationManager nm = (NotificationManager) ctx 
      .getSystemService(Context.NOTIFICATION_SERVICE); 

    NotificationCompat.Builder builder = new NotificationCompat.Builder(ctx); 
    Resources res = ctx.getResources(); 

    builder.setContentIntent(contentIntent) 
       .setSmallIcon(R.drawable.notify_icon) 
       .setWhen(System.currentTimeMillis()) 
       .setContentTitle(title) 
       .setContentText(text) 
       .setAutoCancel(false); 

    Notification n = builder.getNotification(); 

    nm.notify(notificationID, n); 
} 

如果它有什麼區別(很確定它沒有)我在這裏使用應用程序上下文。

我的服務定期啓動,處理一個網站,如果需要通知,然後關閉。

在我的服務結束,而不是僅僅調用stopSelf()我睡了30秒左右然後調用stopSelf()。然後通知停留30秒,然後消失。在通知消失時,logcat中不會顯示任何相關信息。

到目前爲止,我只能使用ICS進行測試。

+0

這應該是罰款。如果您的應用程序被強行殺死,通常通知將會消失。我期望有什麼東西在崩潰。看看你用什麼代碼來「睡眠」(你實際上是在告訴線程進入睡眠狀態?)以及運行什麼線程會很有趣。嘗試去除實驗30秒睡眠並查看是否發生相同行爲也會很有趣。 – kabuko 2012-09-07 19:37:40

+0

取消通知的代碼在哪裏?此外,FYI你不應該使用像android.intent.action。*這樣的直接字符串,因爲這是一個CONSTANT,可以在Intent類中使用。 @ user1531605 – JoxTraex 2012-09-12 03:55:08

+0

如果要求服務在「發佈通知之前停止」,即在相同的代碼執行鏈上停止,通知將被清除。 – 2014-12-12 06:18:13

回答

2

你似乎忘了先查看開發者手冊。請參閱http://developer.android.com/guide/topics/ui/notifiers/notifications.html並查找FLAG_ONGOING_EVENT和FLAG_NO_CLEAR標誌。

我只能使用ICS測試到目前爲止。

這就是爲什麼模擬器非常有用。嘗試一下。它是SDK的一部分。

+0

我讀過了,那些不是我想要的。通知應該能夠通過「清除通知」按鈕清除,所以FLAG_NO_CLEAR不會有幫助。這不是一個持續的事件。來自文檔「如果此通知是針對某個特定時間點發生的事情,則不應設置,如未接電話。」這正是這一點,是對特定時間點發生的事情的引用。 雖然作爲一個旁註,我做了測試與這些標誌以防萬一,並有相同的結果。服務關閉時,通知仍然消失。 – user1531605 2012-07-17 14:03:41

+0

你在4.x之前的機器人上檢查過你的代碼嗎?仿真器就足夠了。 – 2012-09-10 17:00:46

+0

發佈您的服務的源代碼,只有相關的,如創建和銷燬。 – JoxTraex 2012-09-12 04:00:39

4

您發佈的代碼有效。我在jb上從活動和服務兩方面對它進行了測試,並且在組件停止時通知會保留。我甚至證實我可以殺死這個進程,並保留通知。嘗試剝離應用程序,看看問題是否存在。具體檢查一下,看看你是否錯誤地通知取消通知。

1

請儘量在同一設備上的老路上,並告訴我們,如果它的工作方式:

private static void CreateNotificationCompat(int notificationID, String link, String title, String text, Context ctx) { 
    String ns = Context.NOTIFICATION_SERVICE; 
    NotificationManager mNotificationManager = (NotificationManager) ctx.getSystemService(ns); 
    Notification notification = new Notification(R.drawable.notify_icon, title, System.currentTimeMillis()); 
    notification.flags = Notification.FLAG_AUTO_CANCEL; 
    PendingIntent contentIntent; 
    Bundle bundle = new Bundle(); 
    Intent notificationIntent = new Intent("android.intent.action.VIEW", Uri.parse(link)); 
    contentIntent = PendingIntent.getActivity(ctx, notificationID, 
       notificationIntent, 0); 
    notification.setLatestEventInfo(ctx, title, text, 
      contentIntent); 
    mNotificationManager.notify(notificationID, notification); 
}