Jak poprawnie obsługiwać dwa powiadomienia startForegrounds

Mam IntentService, który przesyła plik. Wszystko działa dobrze, ale jestem trochę zdezorientowany, jak obsługiwać powiadomienia. Kiedy rozpoczynam powiadomienie, używamstartForeground() ponieważ pliki mogą być dość duże i nie chcę, aby przesyłanie zostało zabite, chyba że jest to absolutnie konieczne. Kiedy używamstartForeground() wyświetla dwa powiadomienia w obszarze powiadomień (jeden w obszarze W trakcie i jeden w obszarze Powiadomienia):

Przeczytałem wiele różnych postów i artykułów internetowych dotyczących przepełnienia stosu, ale żaden z nich nie odpowiada na pytanie, które mam ... mam nadzieję, że nie ominęłem jednego z nich, który mówi o tym.

Rozumiem, że bieżące powiadomienie na powyższym obrazku (ten bez paska postępu) jest tam umieszczane, ponieważ jest ono uruchomione na pierwszym planie (Dokumentacja usług). Wszystko dobrze i dobrze, jeśli mnie zapytasz i rozumiem dlaczego. Nie potrzebuję jednak dwóch wyświetlanych powiadomień i jestem prawie pewien, że większość ludzi również nie chciałaby, aby dwa powiadomienia zaśmiecały obszar powiadomień. Chciałbym wiedzieć, jak prawidłowo obsłużyć powiadomienie, aby wyświetlał się tylko jeden i nie zaśmiecał obszaru powiadomień.

Jedynym sposobem na obejście tego problemu jest ustawienie identyfikatora liczby całkowitej dlastartForeground (int id, Notification notification) (ONGOING_NOTIFICATION_ID w moim kodzie poniżej) do zera. Jednak dokumentacja, którą cytuję powyżej, mówi:

Caution: The integer ID you give to startForeground() must not be 0

Ustawienie go na 0 wyłącza powiadomienie W toku, a następnie pokazuje zwykłe powiadomienie za pomocą paska postępu. Myślę, że mógłbym „naprawić” to, ustawiając.setOngoing(true) dopóki nie zakończy przesyłania pliku, a następnie ustawienia.setOngoing(false) po jego zakończeniu można go odrzucić. Nie jestem pewien, jak dokładnie „ostrożny” musi być przy ustawianiu liczby całkowitej na 0. Wydaje mi się, że jest to leniwy sposób na obejście problemu, który mam, ale ja nie wiem, czy istnieją inne konsekwencje ustawienia go na 0. Działa to również tylko wtedy, gdy mam tylko jedno powiadomienie, z którym mam do czynienia. Jeśli mam wiele różnych powiadomień, będę potrzebował różnych identyfikatorów dla każdego z nich i to nie zadziała.Aktualizacja: To wygląda jakustawienie ID na 0 nie zadziała w Androidzie 4.3, więc teraz wróciłem do pierwszego.

Jaki jest prawidłowy sposób obejścia wyświetlania obu powiadomień?

Aktualizacja / rozwiązanie: Duh, trochę wolnego czasu, a potem powrót do tego i sprawdzenie, co zrobiłem na podstawie rekomendacji @dsandler, pomogło mi zrozumieć, co robię źle. Nie ustawiałem poprawnego identyfikatora, gdy robiłem aktualizację postępu, dlatego właśnie tworzył dwa powiadomienia, a jeden nie był aktualizowany. Używając tego samego identyfikatora (ONGOING_NOTIFICATION_ID) dla wszystkich powiadomień rozwiązałem problem dla mnie. Zobacz poniższy kod, aby uzyskać dodatkowe elementy, których wcześniej nie uwzględniłem i gdzie popełniłem błąd.

Odpowiedni kod z UploadFile.java:

public class UploadFile extends IntentService {

    private static final int ONGOING_NOTIFICATION_ID = 1;

    @Override
    protected void onHandleIntent(Intent intent) {
        mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        mBuilder = new NotificationCompat.Builder(this);
        mBuilder.setContentTitle(getText(R.string.upload))
            .setContentText("0% " + getText(R.string.upload_in_progress))
            .setSmallIcon(android.R.drawable.stat_sys_upload);

        startForeground(ONGOING_NOTIFICATION_ID, mBuilder.build());


....

    if (progress > 0){
        percent = (Long.valueOf(progress) * 100) / totalSize;
        mBuilder.setProgress(100, percent.intValue(), false);
        mBuilder.setContentText(percent.intValue() + "% " + getText(R.string.upload_in_progress));
        mNotifyManager.notify(ONGOING_NOTIFICATION_ID, mBuilder.build()); // <-- My problem was that I had set the ID here to 0 and did not make it the same as the ID I set above
    }                       

....

}

questionAnswers(2)

yourAnswerToTheQuestion