2012-11-30 57 views
6

過去幾天我在應用程序中遇到NotificationManager問題,而且我似乎沒有越來越近解決它。NotificationManager無法顯示「notify:id corrupted:sent 1,got back 0」warning的通知

我有一個非常簡單的服務,目前沒有做任何事情。它只是應該顯示通知:

public class UpdateService extends Service { 
private static final String TAG = "UpdateService"; 
private static int NOTIFICATION_ID = 1; 
private UpdateServiceBinder binder = new UpdateServiceBinder(); 

@Override 
public void onCreate() { 
     Log.i(TAG, "Service created"); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.i(TAG, "Service started"); 

    sendNotification(100); 

    return Service.START_NOT_STICKY; 
} 

private void sendNotification(int updatedItems) { 
    NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext()) 
      .setSmallIcon(R.drawable.icon) 
      .setContentTitle("Sync") 
      .setContentText("Updated " + updatedItems); 

    Intent resultIntent = new Intent(getBaseContext(), MainActivity.class); 

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(getApplicationContext()); 
    stackBuilder.addParentStack(MainActivity.class); 
    stackBuilder.addNextIntent(resultIntent); 

    PendingIntent resultPendindIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 

    builder.setContentIntent(resultPendindIntent); 

    NotificationManager manager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); 
    manager.notify(NOTIFICATION_ID, builder.build()); 
} 

@Override 
public IBinder onBind(Intent intent) { 
    return binder; 
} 

@Override 
public boolean onUnbind(Intent intent) { 
    return true; 
} 

public class UpdateServiceBinder extends Binder { 
    public UpdateService getService() { 
     return UpdateService.this; 
    } 
} 

}

不幸的是,當服務已啓動,該通知應該顯示沒有任何反應。該服務肯定是根據日誌消息啓動的。同時有來自NotificationManager警告:

11-30 23:24:34.620:I/UpdateService(28356):服務創造

11-30 23:24:34.800:I/UpdateService (28356):服務開始

11-30 23:24:34.808:W/NotificationManager(28356):通知:損壞ID :發送1,回來0

我嘗試使用比不同的數字1但它沒有幫助。我不知道該怎麼做。我使用的代碼來自here服務中的Android文檔以及here中的通知。當我將代碼隔離在獨立的乾淨應用程序中,該應用程序以類似於我正在處理通知的方式進行設置時顯示正確。有沒有人有過這個問題或有任何想法?

任何幫助表示讚賞。 謝謝!

回答

1

我找到了解決這個問題的辦法。我必須將包名稱從com.gttn.sample更改爲com.gttn.sample2。不確定爲什麼我必須這樣做,但通知顯示正確,警告消失。

+0

我做了同樣的,它的工作..我不知道爲什麼 –

+0

我做了同樣的,它的工作:) –

-1

我不確定你爲什麼使用getBaseContext(),但我建議你使用getApplicationContext()來代替。另外,我不確定爲什麼你對服務有約束力。

+0

你是對的我應該使用getApplicationContext()。事實上,第一個版本的代碼使用它。我忘記恢復對代碼的更改。它不適用於getApplicationContext()拋出完全相同的警告,並且不會顯示通知。另外,由於我想先嚐試通知,因此我現在並沒有從任何地方綁定到該服務。將來我會綁定到服務以便與之通信。感謝您的答覆。 – gttn

-1

我只是自己看着這個問題。沒有來自日誌文件的額外行(應該在5行之後),可能會有類似於「E/NotificationService(287):通過用戶請求阻止來自程序包的通知」的消息。這是ICS(也許是JB)中的一個新設置,可以基於每個應用禁用通知。進入設置 - >應用程序 - >並點擊頂部附近的複選框「顯示通知」。出於顯而易見的原因,更改軟件包名稱將會非常有效地繞過此設置。

10

我有這個問題,然後我記得我禁用了「顯示通知」從我的「應用程序信息」。我啓用它,通知又回來了。

  1. 轉到設置>應用程序(應用程序管理器)。
  2. 點擊你想停止的應用程序。
  3. 點擊以取消選中顯示通知框。

僅供參考,它可能會從一個Android設備到另一個不同,但它們都差不多。

+0

我只是花了幾個小時試圖解決這個問題,有人建議查看logcat即使我的代碼中沒有錯誤正在產生。原來,「顯示通知」是問題所在。真正讓我失望的是,即使在卸載應用程序並重新安裝之後,「顯示通知」仍然被禁用。 WTF Google? – AndroidDev

1

當您安裝並重新安裝設置中的應用很多次的東西

選中「顯示通知」> ApplicationManager>「你的應用」。

只需再次檢查「顯示通知」,並開心!

0

Android似乎有一個限制應用程序從DDOSing通知陰影的速度限制。我在我身邊看到這些日誌,因爲我試圖更新循環中有一個進度通知:

Observable.range(0, 100) 
    .subscribe(progress -> updateProgressNotification(progress)); 

添加每個發射之間的任意延遲解決了這個問題對我來說:

Observable.range(0, 100) 
    .zipWith(Observable.interval(25, TimeUnit.MILLISECONDS), (progress, delay) -> progress) 
    .subscribe(progress -> updateProgressNotification(progress));