2

我无法获得要显示的自定义布局的通知。如果我使用以下(旧)代码:

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>

另外,如果有什么不同,我会在 Android 2.2 模拟器上运行它。

任何人都知道什么可能是错误的,或者我可以如何去追踪这个问题?我有点不知所措,因为我没有要处理的错误消息。谢谢!

4

1 回答 1

11

状态栏通知需要以下所有条件:

  • 状态栏的图标
  • 标题和消息,除非您定义自定义通知布局
  • 一个 PendingIntent,在选择通知时触发

状态栏通知 - 创建通知

您没有指定图标,这意味着您的通知无效。

(但是,是的,在框架方面,这种情况没有适当的错误消息/异常是很糟糕的)


编辑:刚刚通过测试,我可以从 Android 2.2 的评论中确认“隐形”通知。它适用于 2.3.3.,好像你偶然发现了一个在此期间已修复的错误。

对我来说,有问题的行如下:

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

如果我将其注释掉,一切正常。当我android:visibility="gone"在 XML 布局中添加 ProgressBar 时也可以,效果基本相同。但只要我打电话setViewVisibility()给酒吧,一切都崩溃了。

因此,我建议使用 bugtracker 注释中的解决方法,将 ProgressBar 包装到 LinearLayout 并更改其可见性。

于 2011-12-16T02:03:53.600 回答