2015-04-19 3 views
15

При использовании Parse для push-уведомлений наше приложение всегда отображало значок запуска программы. В последней версии Android 5.1 значок выглядит пустым (белый квадрат).Значок уведомлений Android 5.1 пустой

Я попытался установить значок в мета-данных:

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

Основываясь на вопрос here

Но ничего, кажется, работает. Любые идеи?

+3

Любой твердый пиксель в значке окрашен в белый цвет на Lollipop. Используйте значок с «отверстиями» в нем, чтобы выразить контрастность. –

+0

, если ваш значок белый, его стереть – thepoosh

+0

по этой ссылке http://stackoverflow.com/questions/28387602/notification-bar-icon-turns-white-in-android-5-lollipop – Nilabja

ответ

2

Это не связано с Parse или push nitification, а просто как Android 5.0 обрабатывает значки уведомлений. См. Этот вопрос для получения более подробной информации: Notification bar icon turns white in Android 5 Lollipop

+0

Это правда, но он применяется только к значку панели уведомлений - значок с уведомлением остается красочным. –

+0

При настройке SDK на уровень выше 20 он будет показывать белые значки не только на панели, но и на уведомлениях –

12

Вы должны использовать прозрачный и белый значок под Android Lollipop 5.0 или выше. Вы можете расширить класс ParsePushBroadcastReceiver и переопределить два метода, чтобы получить значок уведомлений, совместимый с этими API Android.

@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); 
} 

Не забудьте настроить код для поддержки Lollipop и предыдущих 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

Я реализовал getSmallIconId, и он работал, как вы exaplained –

+1

Большое спасибо за ваш ответ @Pelanes. Поэтому, чтобы расширить его, в основном вам нужно создать класс, например MyPushBroadcastReceiver, расширяющий ParsePushBroadcastReceiver и переопределяющий getSmallIconId (...) и getLargeIcon (...). Не забудьте указать получателя в манифесте. На леденец будут использоваться как маленькие, так и большие значки. На эмуляторе 2.3.7 (который я тестировал) только маленький. –

0

Хотя @Pelanes имеет правильный ответ (и должен быть принят), вот что я сделал. Обратите внимание, что состояние Parse docs for getSmallIconId следующее:

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.

Таким образом, это не совсем необходимо переопределить getSmallIconId() и getLargeIcon() методы.

Что я сделал для решения проблемы, я только что сделал копию своего значка, пробил прозрачные «дыры» в значок и установил в моем манифесте метаданные com.parse.push.notification_icon, чтобы указать на этот новый значок.

Для Android 5.0 требуется, чтобы значок вашего уведомления был белым и прозрачным, как указывали другие. Поэтому необходимо создать отдельный значок. Одна строка в манифесте и один новый доступный файл - все, что требуется.

+0

Вы уверены, что нам не нужно определять, как разные версии ОС должны обрабатывать значок уведомления?Я выполнил то, что вы предложили, и кажется, что значок уведомлений с 'com.parse.push.notification_icon' теперь используется как в Android 4.4, так и 5.1. – Alex

+0

Я тестировал с 5.1 и 4.4.2. 5.1 использует новый значок, 4.4.2 использует обычный значок приложения ... Не знаю, почему это происходит для меня, но не для вас. Возможно, чтобы играть в это безопасно, вам нужно будет различать. Я отредактирую свой ответ. –

0

Попробуйте этот код.

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);