2017-02-14 13 views
0

Я внедрил прослушиватель уведомлений, который в основном копирует входящее уведомление gmail. Затем я увольняю уведомление gmail и показываю свою собственную версию (slighlty customized version с разными кнопками текста/действий). Однако это не настраиваемый макет, я просто использую стиль уведомления по умолчанию.Уведомление использует белый цвет шрифта по умолчанию (нечитабельно)?

Это отлично работает на Android KitKat (темный стиль фона уведомлений), но больше не работает на Android Lollipop и выше (светлый стиль фона уведомлений).

Текст заголовка и кнопки действий выглядят хорошо, но текст в тексте уведомления теперь белый (по умолчанию я думаю) и не читается.

Вот как я реализую это

//Create New Notification Copy 
      Notification.Builder ncomp = new Notification.Builder(this) 
        .setLargeIcon((Bitmap) extras.getParcelable(mNotification.EXTRA_LARGE_ICON)) 
        .setContentInfo("" + numunread) 
        .setSubText(extras.getCharSequence(mNotification.EXTRA_SUB_TEXT)) 
        .setContentText(extras.getCharSequence(mNotification.EXTRA_TEXT)) 
        .setContentTitle(extras.getCharSequence(mNotification.EXTRA_TITLE)) 
        .setSmallIcon(R.drawable.gmail) 
        .setLargeIcon(sbn.getNotification().largeIcon) 
        .setAutoCancel(true) 
        .setStyle(new Notification.BigTextStyle().bigText(extras.getCharSequence(mNotification.EXTRA_SUB_TEXT))); 
    Notification noti = new Notification.BigTextStyle(ncomp) 
        .bigText(extras.getCharSequence(mNotification.EXTRA_TEXT)) 
        .setSummaryText(extras.getCharSequence(mNotification.EXTRA_SUB_TEXT)) 
        .setBigContentTitle(extras.getCharSequence(mNotification.EXTRA_TITLE_BIG)) 
        .build(); 
    nManager.notify(oldNotificationTag, notifID, noti); 

Вот что уведомление выглядит

Note how the text is there, but it's white and can't be seen.

Является ли это из-за старого SDK я использую? Изменилось ли изменение Google, как это делается? Я не уверен, почему это происходит внезапно, так как я НЕ создавал настраиваемый макет уведомлений. Вот мой Gradle файл:

android { 
    compileSdkVersion 19 
    buildToolsVersion "19.1.0" 

    defaultConfig { 
     minSdkVersion 19 
     targetSdkVersion 19 
     versionCode 5 
     versionName "1.22" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
     } 
    } 
} 

dependencies { 
    compile 'com.android.support:appcompat-v7:19.0.0' 
    compile 'com.android.support:support-v4:19.0.0' 
    compile 'com.google.apis:google-api-services-gmail:v1-rev10-1.19.0' 
    compile files('libs/asmack-android-8-0.8.9.jar') 
    compile files('libs/mail.jar') 
    compile files('libs/activation.jar') 
    compile files('libs/additionnal.jar') 
    compile 'com.github.eluleci:flatui:0.1.2' 
    compile 'de.cketti.library.changelog:ckchangelog:1.2.0' 
    } 

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:2.2.3' 
    } 
} 

allprojects { 
    repositories { 
     mavenCentral() 
    } 
} 

ответ

4

Согласно LOLLIPOP version code:

Приложение таргетинга это или более поздняя версия получит эти новые изменения в поведении:

  • Notification.Builder не будет иметь цветов их различных элементов уведомлений, скорректированных так, чтобы они соответствовали новому дизайну материала.

Вы должны быть нацелены на API 21 или выше, чтобы отключить этот режим совместимости и получить текстовые уведомления цвета по умолчанию на API 21+ устройств.

+0

Так дозировать это означает chnaging компилировать целевую версию SDK для 21+ и остальной кода без изменений? –

+0

Таргетинг API 21 включает [несколько изменений поведения] (https://developer.android.com/about/versions/android-5.0-changes.html), но да, просто обновление до 21 API-интерфейса без каких-либо изменений должно быть достаточно для этой конкретной проблемы. – ianhanniballake

-1

Ok использования ниже нажимного кода уведомления

Intent intent = new Intent(this, HomeMainActivity.class); 
int id = (int) System.currentTimeMillis(); 
editor.putString("KEY_APPST", appst); 
editor.apply(); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.putExtra("activity", title3); 
intent.putExtra("id", tid); 
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
int color = getResources().getColor(R.color.white); 
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
NotificationCompat.Builder notificationBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this) 
     .setSmallIcon(R.drawable.aquadeals_partner_tbgic32) 
     .setContentTitle(title) 
     .setSubText(title3) 
     .setContentText(message) 
     .setAutoCancel(true) 
     .setTicker(title) 
     .setDefaults(Notification.DEFAULT_LIGHTS) 
     .setColor(color) 
     .setStyle(new NotificationCompat.BigTextStyle().bigText(title)) 
     .setStyle(new NotificationCompat.BigTextStyle().bigText(message)) 
     .setWhen(System.currentTimeMillis()) 
     .setLargeIcon(BitmapFactory.decodeResource(PushNotificationService.this.getResources(), R.drawable.appicon)) 
     .setSound(defaultSoundUri) 
     .setContentIntent(pendingIntent); 
NotificationManager notificationManager = 
     (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
notificationManager.notify(id /* ID of notification */, notificationBuilder.build()); 

 Смежные вопросы

  • Нет связанных вопросов^_^