2015-04-19 17 views
15

Podczas korzystania z narzędzia Parse dla powiadomień push nasza aplikacja zawsze wyświetla ikonę programu uruchamiającego aplikacji. W najnowszej wersji systemu Android 5.1 ikona wydaje się być pusta (biały kwadrat).Android 5.1 ikona powiadomienia push jest pusta

Próbowałem ustawienie ikonę w danych meta:

<meta-data android:name="com.parse.push.notification_icon" android:resource="@drawable/noti_icon"/> 

oparciu o pytaniu here

ale nic nie wydaje się działać. Jakieś pomysły?

+3

Każdy jednolity piksel na ikonie jest zamalowany białym kolorem na Lollipop. Użyj ikony z "dziurami", aby wyrazić kontrast. –

+0

jeśli twoja ikona jest biała, zostanie usunięta – thepoosh

+0

skorzystaj z tego linku http://stackoverflow.com/questions/28387602/notification-bar-icon-turns-white-in-android-5-lollipop – Nilabja

Odpowiedz

2

Nie jest to związane z analizą typu Parse lub push nitification, ale w jaki sposób Android 5.0 obsługuje ikony powiadomień. Zobacz szczegółowe pytanie: Notification bar icon turns white in Android 5 Lollipop

+0

To prawda, ale dotyczy tylko ikony paska powiadomień - ikona na powiadomieniu pozostaje kolorowa. –

+0

Podczas kierowania SDK do powyżej 20 wyświetli białe ikony nie tylko na pasku, ale także na powiadomieniach –

12

Musisz użyć przezroczystej i białej ikony pod Androidem Lollipop 5.0 lub nowszym. Możesz rozszerzyć klasę ParsePushBroadcastReceiver i zastąpić dwie metody, aby ikona powiadomienia była zgodna z tymi interfejsami API Androida.

@Override 
protected int getSmallIconId(Context context, Intent intent) { 
    return R.drawable.your_notifiation_icon; 
} 

@Override 
protected Bitmap getLargeIcon(Context context, Intent intent) { 
    return BitmapFactory.decodeResource(context.getResources(), R.drawable.your_notifiation_icon); 
} 

Pamiętaj, aby dostosować kod do obsługi Lollipop i poprzednich interfejsów API.

 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
     return BitmapFactory.decodeResource(context.getResources(), R.drawable.your_notifiation_icon_lollipop); 
    } 
    else{ 
     return BitmapFactory.decodeResource(context.getResources(), R.drawable.your_notifiation_icon); 
    } 
+0

Zaimplementowałem getSmallIconId i zadziałało jak exoblained –

+1

Wielkie dzięki za odpowiedź @Pelanes. Aby go rozszerzyć, musisz stworzyć klasę podobną do MyPushBroadcastReceiver, która rozszerzy ParsePushBroadcastReceiver i nadpisze getSmallIconId (...) i getLargeIcon (...). Nie zapomnij podać odbiorcy w manifeście. Na lollipop będą używane zarówno małe, jak i duże ikony. Na emulatorze 2.3.7 (który testowałem) jest tylko mały. –

0

Chociaż @Pelanes ma poprawną odpowiedź (i powinna zostać zaakceptowana), oto co zrobiłem. Zauważ, że stan Parse docs for getSmallIconId następujące:

Retrieves the small icon to be used in a Notification. The default implementation uses the icon specified by com.parse.push.notification_icon meta-data in your AndroidManifest.xml with a fallback to the launcher icon for this package. To conform to Android style guides, it is highly recommended that developers specify an explicit push icon.

Więc to nie jest konieczne, aby całkowicie zastąpić getSmallIconId() i getLargeIcon() metody.

Co zrobiłem, aby rozwiązać problem, to właśnie zrobiłem kopię mojej ikony, wybiłem przezroczyste "dziury" w ikonie i ustawiłem meta-dane w moim manifeście, aby wskazywały na tę nową ikonę.

W przypadku systemu Android 5.0 wymagane jest, aby ikona powiadomienia była biała i przezroczysta, o czym inni już wspominali. Dlatego konieczne jest utworzenie osobnej ikony. Wystarczy jeden wiersz w manifeście i jeden nowy plik do pobrania.

+0

Czy jesteś pewien, że nie musimy definiować, w jaki sposób różne wersje OS powinny obsługiwać ikonę powiadomienia?Wykonałem to, co sugerowałeś i wygląda na to, że ikona powiadomienia ustawiona na 'com.parse.push.notification_icon' jest teraz używana zarówno w Androidzie 4.4, jak i 5.1. – Alex

+0

Testowałem z 5.1 i 4.4.2. 5.1 używa nowej ikony, 4.4.2 używa do zwykłej ikony aplikacji ... Nie wiem, dlaczego tak się dzieje, ale nie dla ciebie. Może jednak, aby grać bezpiecznie, musisz je rozróżnić. Będę edytować moją odpowiedź. –

0

Spróbuj tego kodu.

Bitmap largeIcon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 

NotificationCompat.Builder builder = new NotificationCompat.Builder(context) 
       .setSmallIcon(R.drawable.ic_launcher) 
       .setLargeIcon(largeIcon) 
       .setContentText(data) 
       .setContentTitle("Notification from Parse") 
       .setContentIntent(pendingIntent); 
Powiązane problemy