46

我正在尝试在通知区域中发布带有自定义视图的通知IntentService,并收到Couldn't expand RemoteView错误消息。

这是我正在做的事情onCreate()

mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
icon = R.drawable.icon;
tickerText = "data upload in progress";
contentView = new RemoteViews(getApplicationContext().getPackageName(), R.layout.notiflayout);
contentView.setImageViewResource(R.id.image, R.drawable.icon);
contentView.setTextViewText(R.id.text, "Hello");
contentView.setProgressBar(R.id.progressBar, 100, 10, false);
whatNext = PendingIntent.getActivity(getApplicationContext(), 0, new Intent(getApplicationContext(), starterActivity.class), 0);
notification = new Notification(icon, tickerText, System.currentTimeMillis());
notification.contentView = contentView;
notification.contentIntent = whatNext;

我从 打来电话notify()onHandleIntent()并取消了 中的通知onDestroy()

我已验证此代码在一个独立的应用程序中工作,该应用程序没有IntentService. 这样做在IntentService某种程度上会带来麻烦。

有人可以解释一下我做错了什么吗?

4

16 回答 16

16

对我来说,问题是我在自定义通知视图 xml 文件中为根布局设置了特定高度。

我一改:

android:layout_height="@dimen/notification_expanded"

android:layout_height="match_parent"

在通知视图的根布局中,问题已解决。

另请查看此示例以查看使用自定义布局通知的简单示例。

于 2015-06-02T21:22:10.797 回答
12

由于未知原因,您不允许在自定义远程视图的根视图中引用尺寸!所以你必须像硬编码一样android:layout_height="64dp",但如果你使用android:layout_height="@dimen/notification_height_that_64"它会给你Bad notification posted - Couldn't expand RemoteViews for: StatusBarNotification。我希望这个能帮上忙 :)

于 2016-12-28T13:47:51.500 回答
11

在我的情况下,异常是由View我的自定义通知布局中的常规引起的。基本上,这是因为您只允许使用某些小部件,如 TextView、ImageView 等。

于 2016-10-31T11:48:18.937 回答
8

就我而言,我能够通过减小我提供的图标大小来修复此错误 .setSmallIcon();

于 2017-02-05T08:53:05.333 回答
7

对我来说,问题是View在为自定义通知设置的自定义布局中有一个项目。从布局中删除View项目解决了发布错误通知的问题。

如果您使用RemoteView.

layout_height清洁项目和设置都不match_parent适合我。

于 2016-10-11T13:44:08.220 回答
4

我有同样的问题。就我而言:

原因->我为builder.setAction(R.drawable.icon,...)函数使用了vectordrawable,我也尝试从支持库启用它们,但没有任何效果。在最近的 Android 系统中,我看不到操作图标,而在其他系统中,它会出现此错误。

解决方案->我什么也没找到,对我来说唯一的解决方法是避免将 .xml 文件用于可绘制对象并在所有目录 hdpi mdpi ldpi 中使用 .png 文件。

于 2017-11-09T20:22:30.720 回答
4

我得到了同样的错误,但对我来说问题是约束布局。我将其更改Relative Layout为解决问题。

于 2018-03-14T02:11:13.070 回答
2

我看到与这个主题相关的问题很多,在我的情况下,这个问题是由使用引起的

android:background="?attr/selectableItemBackground" 

我在我的ImageButton和每次我的应用程序崩溃时都使用它,但是当我删除它时,一切都很好,我想问题是你不应该View在你的视图上使用任何自定义类型或任何主题属性,我希望这将有助于另一个坚持这个问题

于 2019-07-19T09:48:52.990 回答
1

@Nikolai 的回答对我很有帮助,确实是问题所在。我遇到过同样的问题。通知中可以使用特定的控件。我的布局中有一个视图用于通知,如下所示。

<View
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="0.04"/>

这是导致崩溃的原因。支持以下布局和控件: 在此处输入图像描述

根据这个官方文档

我删除了它,它工作正常。希望它可以帮助某人。

于 2018-09-17T20:32:03.267 回答
0

我在通知中显示自定义布局时遇到了同样的问题,我发现的是:

我使用ConstraintsLayout作为自定义通知的根布局,这是我犯的错误。由于在 android 中使用约束布局有一些限制。

最后,我将根布局更改为RelativeLayout,并且我的通知完美显示。我在下面的屏幕截图中附上了我的观点。

在此处输入图像描述

于 2018-08-29T09:26:20.147 回答
0

不要将 XML矢量绘图用于较旧的 android 版本。它会使应用程序崩溃。使用 PNG

于 2020-06-05T20:32:45.197 回答
0

使用矢量可绘制对象时要小心。在棒棒糖之前的设备上,通过NotificationCompat.Builder方法设置图标,例如setSmallIcon,将导致此崩溃。如果在自定义视图中使用矢量可绘制对象,您将遇到同样的崩溃。

于 2018-01-19T10:53:22.297 回答
0

就我而言,在 addAction icon(1st arg) 中是问题所在。我把它改成png,它工作。然后用 0 试了一下,效果也不错。

于 2021-01-01T23:49:57.003 回答
0

就我而言,问题是通话之间的不一致

setShowActionsInCompactView(0)

.addAction电话......动作的数量不同,因此错误

于 2018-10-28T11:06:23.657 回答
0

对我来说,问题出在NotificationCompat.Builder.addAction我设置为与所有设备不兼容的操作的图标上。我使用Andriod Studio -> File -> New -> Image Asset生成图标,然后就可以了。

于 2020-10-27T14:41:02.450 回答
-2

一般,这个错误说明你的contentView有错误,检查一下!也许您最好将您的 contentView 替换为仅包含 TextView 的布局。好的,运行它,希望对您有所帮助。

于 2015-06-09T10:01:42.373 回答