2011-12-16 3 views
2

У меня возникли проблемы с получением уведомления с настраиваемым макетом для отображения. Если я использую следующий (старый) код:Пользовательские уведомления Android не отображаются

notification = new Notification(); 
notification.icon = R.drawable.icon; 
notification.tickerText = currentTickerText; 
notification.when = System.currentTimeMillis(); 
notification.setLatestEventInfo(context, (CharSequence)currentTitle, (CharSequence)"", pendingIntent); 

Все работает должным образом и появляется уведомление. Однако, если я использую следующий (новый) код:

contentView = new RemoteViews(context.getPackageName(), R.layout.service_notification); 
contentView.setImageViewResource(R.id.image, R.drawable.icon); 
contentView.setTextViewText(R.id.title, (CharSequence)currentTitle); 
contentView.setTextViewText(R.id.text, (CharSequence)""); 
contentView.setViewVisibility(R.id.pgStatus, View.GONE); 

notification = new Notification(); 
notification.tickerText = currentTickerText; 
notification.when = System.currentTimeMillis(); 

notification.contentView = contentView; 
notification.contentIntent = pendingIntent; 

Уведомление никогда не отображается. Мне тоже не дают ошибки, поэтому я не уверен, где искать проблему. Вот код макета service_notification:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/layout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dp" > 
    <ImageView android:id="@+id/image" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:layout_alignParentLeft="true" 
     android:layout_marginRight="10dp" /> 
    <TextView android:id="@+id/title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toRightOf="@id/image" 
     android:text="This is the title." 
     style="@style/NotificationTitle" /> 
    <TextView android:id="@+id/text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toRightOf="@id/image" 
     android:layout_below="@id/title" 
     android:text="This is the status" 
     style="@style/NotificationText" /> 
    <ProgressBar 
     android:id="@+id/pgStatus" 
     style="?android:attr/progressBarStyleHorizontal" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/text" 
     android:layout_toRightOf="@+id/image" /> 
</RelativeLayout> 

Кроме того, я бегу это на 2.2 эмулятора Android, если это делает разницу.

У кого-нибудь есть идеи о том, что может быть неправильным или как я могу найти решение проблемы? Я немного растерялся, так как у меня нет сообщения об ошибке для работы. Благодаря!

ответ

11

Уведомление в строке состояния требуется все следующие:

  • значок для строки состояния
  • заголовок и сообщение, если вы не определите расположение пользовательских уведомлений
  • PendingIntent , которые должны быть запущены, когда уведомление выбрано

из Status Bar Notifications - Creating Notifications

Вы не указать значок, который означает, что ваше уведомление не является действительным.

(Но да, это плохо на рамочный стороне, что нет надлежащего сообщения об ошибке/исключения для этого случая)


Edit: Просто проверила это через, и я могу подтвердить " невидимым "из комментария на Android 2.2. Он работает на 2.3.3., Похоже, вы наткнулись на over a bug, который был исправлен тем временем.

Проблематика строка будет для меня:

contentView.setViewVisibility(R.id.pgStatus, View.GONE); 

Если я комментирую, что из, все работает. Он также работает, когда я добавляю android:visibility="gone" в ProgressBar в XML-макете, который имеет в основном тот же эффект. Но как только я нахожу setViewVisibility() на баре, все разбивается.

Поэтому я бы рекомендовал обходное решение из комментариев к bugtracker, обернуть ProgressBar в LinearLayout и изменить видимость этого.

+0

Hm. Ну, это, по крайней мере, часть проблемы. Теперь уведомление о тикере показывает, но когда я перетаскиваю его, чтобы увидеть текущие уведомления, он говорит, что их нет ... хотя мой значок четко отображается в верхнем левом углу. Мысли? –

+0

@SpencerRuport Отредактировал мой ответ.:) –

+0

У меня есть значок (и все остальные требования) и ... ничего. Код выполнен, нет ошибок, и не появляется уведомление :( – SteveCav