Jak naprawić: android.app.RemoteServiceException: Bad notification posted from package *: Couldn ' t create icon: StatusBarIcon

Widzę następujący wyjątek w dziennikach awarii:

android.app.RemoteServiceException: Bad notification posted from package com.my.package: Couldn't create icon: StatusBarIcon(pkg=com.my.package user=0 id=0x7f02015d level=0 visible=true num=0 )
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1456)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:146)
    at android.app.ActivityThread.main(ActivityThread.java:5487)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
    at dalvik.system.NativeStart.main(Native Method)

Zamieszczam moje powiadomienie z IntentService z zestawu PendingIntent za pośrednictwem Menedżera alarmów przy użyciu następującej metody. Wszystkie przekazywane tutaj wartości pochodzą z pakietu dodatki w PendingIntent / IntentService.

/**
 * Notification 
 *
 * @param c
 * @param intent
 * @param notificationId
 * @param title
 * @param message
 * @param largeIcon
 * @param smallIcon
 */
public static void showNotification(Context c, Intent intent,
        int notificationId, String title, String message, int largeIcon,
        int smallIcon) {
    PendingIntent detailsIntent = PendingIntent.getActivity(c,
            notificationId, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    // BUILD
    NotificationCompat.Builder mNotifyBuilder = new NotificationCompat.Builder(
            c);
    // TITLE
    mNotifyBuilder.setContentTitle(title).setContentText(message);

    // ICONS
    mNotifyBuilder.setSmallIcon(smallIcon);
    if (Util.isAndroidOSAtLeast(Build.VERSION_CODES.HONEYCOMB)) {
        Bitmap large_icon_bmp = ((BitmapDrawable) c.getResources()
                .getDrawable(largeIcon)).getBitmap();
        mNotifyBuilder.setLargeIcon(large_icon_bmp);
    }

    mNotifyBuilder.setContentIntent(detailsIntent);
    mNotifyBuilder.setVibrate(new long[] { 500, 1500 });
    mNotifyBuilder.setTicker(message);
    mNotifyBuilder.setContentText(message);

    // NOTIFY
    NotificationManager nm = (NotificationManager) c
            .getSystemService(Context.NOTIFICATION_SERVICE);
    nm.notify(notificationId, mNotifyBuilder.build());
}

Z tego, co widziałem z innych odpowiedzi-wyjątek, który widzę, dzieje się, gdy {[2] } nie jest poprawnie wywołany.

Sprawdziłem i dwukrotnie sprawdziłem, że identyfikatory zasobów / align = "left" /

Author: Sufian, 2014-08-14

23 answers

To, co się działo, to to, że włączałem odniesienie integer do ikony w pakiecie PendingIntent, a ta liczba całkowita była później odwoływana podczas wysyłania do Menedżera powiadomień.

Pomiędzy pobieraniem referencji całkowitej a wyłączaniem oczekującej intencji, aplikacja została zaktualizowana i zmieniono wszystkie możliwe do narysowania odwołania. Liczba całkowita, która była używana do odwoływania się do poprawnego drawable, teraz odwołuje się do niepoprawnego drawable lub none at all ( none at all-causing this crash)

 103
Author: FishStix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-06 23:44:07

Użycie VectorXml wewnątrz twojego powiadomienia było znane, że powoduje ten problem. Użyj png

 54
Author: Bubunyo Nyavor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-25 14:46:20

Nie używaj SVG na Kitkacie!

Miałem ten sam problem za każdym razem, gdy chciałem pokazać powiadomienie na Kitkat. To, co spowodowało dla mnie problem, to to, że zdefiniowałem każdą ikonę w XML (z svg), małą ikonę i ikonę akcji również. Po zastąpieniu ich png-s problem rozwiązany u mojego boku.

 34
Author: bendaf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-24 11:06:34

Android.app.RemoteServiceException: Bad notification posted

Miałem ten sam problem, ale został rozwiązany. Moim problemem jest ".plik xml " zdalnego widoku.

W moim pliku xml został dodany jeden View pomiędzy LinearLayout dla dzielnika.

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:id="@+id/view"
    android:background="#000000" />

Powyższy komponent View tworzący wyjątek Bad notification. Powodem tego wyjątku jest tylko plik XML Remoteviews.

Po usunięciu tego komponentu View Mój kod działał poprawnie, bez żadnego wyjątku. Więc Ja czułem, że szuflada powiadomień nie akceptuje żadnych niestandardowych widoków.

Więc nie rysuj niczego takiego jak powyższy widok w .plik xml obiektu RemoteView.

 10
Author: Kona Suresh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-11 13:32:10

Mój problem polegał na tym, że ikona, której używałem na

.setSmallIcon(R.drawable.ic_stat_push_notif)

Nie został odpowiednio wygenerowany. Według oficjalnego doc:

Jak opisano w dostarczaniu zestawów ikon specyficznych dla gęstości i wspieraniu Wielu ekranach, należy utworzyć osobne ikony dla wszystkich uogólnionych gęstości ekranów, w tym niskiej, średniej, wysokiej i ekrany o bardzo dużej gęstości. Dzięki temu twoje ikony będą wyświetlane odpowiednio w całej gamie urządzeń, na których aplikacja może be zainstalowany.

Więc najlepszym sposobem na wypełnienie powyższego, użyłem Generator powiadomień provided by Roman Nurik on https://romannurik.github.io/AndroidAssetStudio/index.html

W ten sposób możesz użyć obrazu (biorąc pod uwagę, że musi on mieć przezroczyste tło) i pozwolić generatorowi wykonać zadanie za Ciebie generując różne rozmiary ikon powiadomień.

Najważniejsze jest to, że jeśli ikona generator po przejrzeniu obrazu, który zamierzasz użyć, pokazuje białe wypełnione kółko lub kwadrat, występują problemy z obrazem, może dlatego, że nie ma żadnych przezroczystości, więc upewnij się, że masz to ok.

 9
Author: Carlos Daniel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-04 22:43:15

W mojej aplikacji ten rodzaj błędu występuje tylko podczas aktualizacji. Jeśli identyfikator zasobu zmieni się w nowszej wersji, Android RemoteView może nie znaleźć zasobu i wyrzucić RemoteServiceException. Jeśli opublikujesz trzecią wersję i nie zmienisz identyfikatora zasobu, błędy mogą zniknąć tylko tymczasowo.

Możliwe jest zmniejszenie tego rodzaju błędów poprzez edycję res/values/public.xml i res/values/ids.xml. Kompilator wygeneruje indywidualny identyfikator zasobu, jeśli nie znajduje się on w public.xml lub ids.xml. When u change the nazwa zasobu lub dodanie nowych zasobów, identyfikator może ulec zmianie, a niektóre urządzenia mogą go nie znaleźć.

Więc krok jest następujący:

  1. dekompilować plik apk i w res/values znaleźć public.xml i ids.xml
  2. Znajdź wszystkie zasoby związane z RemoteView w aplikacji i skopiuj je (strings, dimen, drawable, layout, id, color... )
  3. Utwórz public.xml i ids.xml POD res/values w kodzie źródłowym i wklej wiersze, które właśnie skopiowałeś

Uwaga:

Gradle 1.3.0 i wyżej ignoruj lokalne public.xml. Aby to działało, musisz dodać skrypt w swoim build.gradle

afterEvaluate {
    for (variant in android.applicationVariants) {
        def scope = variant.getVariantData().getScope()
        String mergeTaskName = scope.getMergeResourcesTask().name
        def mergeTask = tasks.getByName(mergeTaskName)
        mergeTask.doLast {
            copy {
                int i=0
                from(android.sourceSets.main.res.srcDirs) {
                    include 'values/public.xml'
                    rename 'public.xml', (i == 0? "public.xml": "public_${i}.xml")
                    i++
                }
                into(mergeTask.outputDir)
            }
        }
    }
}

Uwaga: Ten skrypt nie obsługuje projektu podmodułów. Próbuję to naprawić.

 7
Author: thundertrick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-09 03:55:58

W Android Studio w wersji 3.0.0 i nowszej, podczas dodawania nowego obrazu w folderze drawables wybierz drawable zamiast drawable-v24.Tutaj wpisz opis obrazka

Jeśli obraz, którego używasz, jest już a (v24) po prostu skopiuj go i wklej do tego samego katalogu (np. drawables). Tym razem zapyta cię, który zwykły lub v24 - po prostu upewnij się, że nie jest to v24 i spróbuj ponownie, to powinno naprawić błąd.

 4
Author: Haider Malik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-30 04:28:33

Masz tę samą ikonę

     <meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/ic_stat_name" />

I ty

 NotificationCompat.Builder notificationBuilder =
                new NotificationCompat.Builder(this, channelId)
                        .setSmallIcon(R.drawable.ic_stat_name)
                        .setContentTitle("Title")
                        .setContentText(messageBody)
                        .setAutoCancel(true)
                        .setSound(defaultSoundUri)
                        .setContentIntent(pendingIntent);
 3
Author: Tarun Umath,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-02 12:07:15

Na wypadek, gdyby ikona nie była ważna, możesz zastąpić,

R.drawable.your_icon

Do

android.R.drawable.some_standard_icon
To działa!
 3
Author: Ashwin Balani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-15 07:27:45

Miałem RemoteServiceException, gdy używaj powiadomienia w mojej klasie rozszerza się z FirebaseMessagingService. Dodałem następujący kod do AndroidManifest.xml:

<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/ic_small" />

Również resource ic_small ustawiony w instancji klasy Notification.Builder by method setSmallIcon (int icon).

 2
Author: Вячеслав Бондаренко,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-19 07:56:32

Ten sam problem zdarzył się również u mnie i rozwiązałem ten sam

REASON: dzieje się tak, ponieważ używamy Vector drawable dla RemoteViews i vector drawable generuje drawable w czasie kompilacji. Nie jestem również pewien, dlaczego niektóre urządzenia nie są w stanie wykryć wygenerowanego identyfikatora zasobów rysowalnych podczas podnoszenia aplikacji. Ale tak, to był powód.

REPRODUCE Kroki 1. Zainstaluj poprzedni kompilator. 2. Wyślij powiadomienie 3. Zaktualizuj kompilację za pomocą kod następnej wersji 4. Po aktualizacji aplikacji nie otwieraj aplikacji i nie Wysyłaj powiadomienia ponownie

Rozwiązanie Zamień wektor drawable na normalny drawable(.png lub .plik jpg.

Mam nadzieję, że to rozwiąże problem.

 2
Author: Gajju,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-30 05:13:27

Jeśli masz widoczne powiadomienie podczas aktualizacji aplikacji, możesz go napotkać. Co może być konieczne, to utworzyć BroadcastReceiver, który czeka na wiadomość PACKAGE_CHANGED, w którym momencie można zamknąć wszystkie swoje usługi, które również odrzucić ich powiązanych powiadomień.

 <receiver android:name=".MyBroadcastReceiver">
    <intent-filter>
        <action android:name="android.intent.action.PACKAGE_CHANGED" />
    </intent-filter>
</receiver>
 1
Author: Glaucus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-04 16:48:43

Miałem ten sam problem, gdy ustawiałem powiadomienie w pakiecie. Próbowałem tego i to rozwiązało mój problem:

builder.setLargeIcon(large_icon);
builder.setSmallIcon(R.drawable.small_icon);

Upewnij się, że setLargeIcon() została wywołana przed setSmallIcon ().

 0
Author: Jelly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-26 10:06:11

Ja też miałem ten sam problem. Problem jest z ikoną, której używasz, używałem Androida.R. drawable.stat_sys_download. Idź do drawables.xml i wklej to.

<resources>
 <item name="ic_start_download" type="drawable">@android:drawable/stat_sys_download</item>
</resource>

A następnie w Twoim kodzie

builder.setSmallIcon(R.drawable.ic_start_download);

Możesz spróbować innego obrazu zamiast tego obrazu

 0
Author: karthik vishnu kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-22 10:19:13

Mój sposób na rozwiązanie: miałem " złe " widoki w moim układzie (np: pole wyboru) - więc je usunąłem.

RemoteViews wydają się obsługiwać tylko obrazy i teksty (do potwierdzenia przez przeczytanie dokumentu).

 0
Author: Benjamin Piette,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-16 08:50:39

Miałem RemoteServiceException podczas korzystania z Androida.wsparcie.ograniczenie.ConstraintLayout. Zmień go na LinearLayout lub Relative a także android: layout_height=" wrap_content " dla kontenera

 0
Author: JustAndrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-02 09:06:26

(nie jest to rozwiązanie dla bieżącego pytania, ale pomaga komuś z podobnym problemem core) ja też miałem ten sam problem, ale w moim przypadku używałem corrupted .plik png, który powoduje ten sam problem. Więc usunąłem go i ponownie włączyłem poprawne .plik png.

 0
Author: RameshJanagama,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-04 15:39:58

Proszę zastąpić <android.support.v7.widget.AppCompatTextView<TextView z niestandardowego układu powiadomień.

Ponieważ android.support.v7.widget.AppCompatTextView lub android.support.v7.widget.AppCompatImageView działa tylko w czasie wykonywania.

Więc użyj TextView lub ImageView

 0
Author: Ahamadullah Saikat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-03 17:48:33

Jeśli ktoś nadal ma do czynienia z tym problemem : Dodaj plik png do folderu rysowalnego o nazwie ic_stat_ic_notification (lub dowolnej nazwy podobnej do u)

I w manifeście dodaj poniżej kilka linijek

I możesz tworzyć swoje ikony tutaj - > https://romannurik.github.io/AndroidAssetStudio/icon

 0
Author: Jayapen Jose,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-17 02:48:13

Zsynchronizuj projekt i wyczyść go, Plik > Synchronize then: Build > Clean Project

Mam nadzieję, że to wam pomoże, to praca dla mnie

 0
Author: the real napster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-24 09:41:18

Dostałem ten błąd z powodu opcji autolink i linksClickable w textview w widoku powiadomień:

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:autoLink="all"
        android:linksClickable="true"
        android:text="@string/app_name"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="@color/white" />
Uważaj!
 0
Author: Master,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-21 22:00:35

Możesz umieścić ten wektorowy plik xml zarówno w wersji drawable, jak i drawable v24. Ta wersja Androida mniejsza lub równa Androidowi 6 odbierze go z folderu drawable, a nowsza wersja powyżej Androida 6 odbierze go z drawable v24.

 0
Author: Josi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-31 16:10:01

To zadziałało dla mnie. Skomentuj odniesienie do ikony, a tym samym być w stanie korzystać z NotificationCompat.Budowniczy bez problemów.

    $msg_notificacion = [
                        'title'         => "titulonotif",
                       // "icon" : "myicon",
                        'body'          =>"cuerponotif"
                    ];
 -3
Author: Alfonso Gutiérrez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-03 17:55:09