Уведомления видны в API 17, но невидимы в API 13.

Я использую NotificationCompat.Builder, чтобы сделать простое уведомление, которое затем добавляется на панель уведомлений. На AVD с API 17 уведомление можно увидеть в раскрывающемся списке уведомлений, как и ожидалось. Но на AVD с API 13 заголовок/текст/информация уведомления не видны (возможно, из-за черного текста на черном фоне).

В поисках решения моей проблемы я обнаружил следующее: Пользовательское уведомление цвета и цвета текста Но это, похоже, применимо только в случае использования пользовательского макета для уведомления.

Вот мой код:

    private static int notificationId = 1;
private void displayNotification() {

    // create an Intent to launch the Show Notification activity
    // (when user selects the notification on the status bar)
    Intent i = new Intent(this, ShowNotificationActivity.class);
    // pass it some value
    i.putExtra(ShowNotificationActivity.NOTIF_ID, notificationId);

    // wrap it in a PendingIntent
    PendingIntent pendingIntent = PendingIntent.getActivity(this, notificationId, i, 0);

    // create the notification
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
    builder.setContentTitle("This is the Title #" + notificationId);
    builder.setContentText("This is the Text");
    builder.setContentInfo("This is the Info");
    builder.setContentIntent(pendingIntent);
    builder.setSmallIcon(android.R.drawable.ic_notification_overlay);
    builder.setAutoCancel(true);
    Notification notif = builder.build();

    // display the notification
    NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
    nm.notify(notificationId, notif);

    notificationId++;
}

Я надеялся опубликовать несколько снимков экрана, показывающих раскрывающееся меню уведомлений в API 17 и в API 13, но, видимо, у меня недостаточно «очков репутации» для публикации изображений. Поэтому я думаю, что письменного описания должно быть достаточно:

В API 17 в раскрывающемся списке уведомлений отображается значок уведомления (красная точка), заголовок и текст. Цвет фона черный, а цвет текста белый.

В API 13 виден только значок (красная точка). Цвет фона черный, я подозреваю, что цвет текста тоже может быть черным.

Я подозреваю, что мне не хватает чего-то очевидного, но я новичок в этом и был бы признателен за любые указатели.


person Clo Knibbe    schedule 26.02.2013    source источник


Ответы (1)


Когда я скопировал ваш код в свою пустую активность, я получил несколько ошибок (кажется, ваш код неполный). Я добавил эти строки, чтобы заставить его работать:

int notificationId = 1;
Intent intent = new Intent(this, MyActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

//Here goes your code.

Я только что проверил ваш код на эмуляторе 3.2, и вот как выглядит уведомление:

введите здесь описание изображения

Вот так, я считаю, и должно выглядеть.

Не могли бы вы проверить мой код и сообщить мне, работает ли он?

person Anton Cherkashyn    schedule 27.02.2013
comment
Спасибо за ответ, Антон. В (ошибочной) попытке быть кратким я опустил часть кода. Я добавил этот код в свой пост. Он отличается от вашего некоторыми незначительными деталями, которые, я думаю, не имеют отношения к данному вопросу. - person Clo Knibbe; 28.02.2013
comment
Я попробовал свой образец с вашим кодом и все еще наблюдаю то же поведение (не вижу заголовок и текст в раскрывающемся списке). (Снимок экрана, который вы показываете, - это то, что я ожидаю увидеть.) Я пробовал несколько разных AVD, эмулирующих 3.2, но на всех них я получаю одинаковое поведение. Я чувствую, что спотыкаюсь в темноте, когда делаю AVD. Не могли бы вы предоставить мне подробную информацию об AVD, который вы использовали? - person Clo Knibbe; 28.02.2013
comment
Маловероятно, что проблема с AVD, но давайте проверим. Можете ли вы запустить другое приложение, которое создает уведомление, и проверить, правильно ли выглядит его текст? т.е. установите будильник и отложите его, когда он сработает — вы увидите уведомление о тревоге. - person Anton Cherkashyn; 28.02.2013
comment
Я установил будильник с помощью программы часов, а затем отложил его. В панели уведомлений я вижу запись об отложенном будильнике. Я вижу значок (маленькие белые часы), но никаких других подробностей. (Я бы выложил снимок экрана, но у меня нет достаточных привилегий.) - person Clo Knibbe; 28.02.2013
comment
Кстати: я создал 3 3.2 AVD. Необъяснимым образом (по крайней мере, для меня) два из них имеют черный фон в раскрывающемся списке уведомлений, а один — белый. Я вижу свои уведомления в AVD с белым фоном. - person Clo Knibbe; 28.02.2013
comment
Интересно, значит проблема действительно с эмулятором. Прежде всего, проверьте, доступны ли обновления для Android SDK, инструментов Android SDK, инструментов платформы и платформы 3.2 SDK. Вот настройки, которые я использовал при создании avd: Устройство: 10.1 WXGA 1280x800, mdpi; Цель: уровень API 13; ЦП/ABI: ARM; Оперативная память: 512; куча виртуальных машин: 32; Внутренняя память: 200 - person Anton Cherkashyn; 28.02.2013
comment
Хм. Теперь я не могу воспроизвести 3.2 AVD с белым фоном в раскрывающемся списке уведомлений. Возможно, я по незнанию использовал 4.x AVD, когда увидел белый фон. - person Clo Knibbe; 28.02.2013
comment
Согласно Android SDK Manager, обновлений нет. Затем я попробую ваши настройки AVD. Спасибо за постоянную помощь. - person Clo Knibbe; 28.02.2013
comment
Я сделал AVD с вашими настройками. На этом AVD я вижу свои уведомления, как и ожидалось. Я рад этому, но я не уверен, как поступить. Все AVD, которые я сделал, предназначались для телефонов, а не для планшетов, но я не понимаю, почему это должно иметь значение. Как я могу определить, какие определения устройств использовать для создания AVD с заданным уровнем API? - person Clo Knibbe; 28.02.2013
comment
Возможная подсказка: определение устройства, которое я использовал для создания своих AVD, было созданным пользователем устройством. Он был основан на универсальном устройстве плюс DPad. Я поэкспериментирую с другими универсальными устройствами, чтобы посмотреть, смогу ли я еще больше изолировать свою проблему. - person Clo Knibbe; 28.02.2013
comment
Кстати, на сегодня я заканчиваю. Еще раз спасибо за вашу помощь с этим, я очень ценю это. - person Clo Knibbe; 28.02.2013
comment
Android 3.*, также известный как Honeycomb (developer.android.com/ about/versions/ ) никогда не предназначался для установки на телефоны, он был специально разработан для планшетов. Невозможно сказать, как он будет вести себя на экране размером с телефон, и я не думаю, что вам следует использовать такой эмулятор. Но это касается только Android 3.*, все остальные версии должны нормально работать со всеми размерами экрана. - person Anton Cherkashyn; 28.02.2013
comment
Ах, вот оно! Я знал, что Honeycomb/3.x предназначен для планшетов, но я не думал об этом при создании AVD 3.x. Спасибо большое! - person Clo Knibbe; 28.02.2013