我正在尝试在IntentService的通知区域中发布带有自定义视图的通知,并收到Couldn't expect 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
中执行此操作会产生麻烦。
有人可以解释一下我做错了什么吗?
谢谢!
答案 0 :(得分:15)
对我来说,问题是我在自定义通知视图xml文件中为根布局设置了特定高度。
我一改变了:
机器人:layout_height = “@扪/ notification_expanded”
到
机器人:layout_height = “match_parent”
在通知视图的根布局中,问题解决了。
另请查看this example,查看使用自定义布局进行通知的简单示例。
答案 1 :(得分:10)
在我的情况下,异常是由我的自定义通知布局中的常规View
引起的。基本上,它是因为您只允许使用TextView,ImageView等特定小部件。
答案 2 :(得分:10)
由于未知原因,您不能在自定义远程视图的根视图中引用维度!所以你必须像android:layout_height="64dp"
那样硬编码,但是如果你使用android:layout_height="@dimen/notification_height_that_64"
它会给你Bad notification posted - Couldn't expand RemoteViews for: StatusBarNotification
。我希望这会有所帮助:)
答案 3 :(得分:6)
对我来说问题是在自定义通知的自定义布局集中有一个View
项。从布局中删除View
项解决了已发布的错误通知的问题。
如果您想使用RemoteView
创建自定义通知,可以使用list of layout items。
清理项目和将layout_height
设置为match_parent
都不适用于我。
答案 4 :(得分:5)
在我的情况下,我能够通过减少我提供给.setSmallIcon();
的图标大小来修复此错误
答案 5 :(得分:3)
我遇到了同样的问题。就我而言:
原因 - >我使用了builder.setAction(R.drawable.icon,...)函数一个vectordrawable,我也尝试从支持lib启用它们但没有任何效果。在最近的Android系统中,我没有看到动作图标,在其他系统中它会出现此错误。
解决方案 - >我没有找到任何结果,对我来说唯一的解决方法是避免使用.xml文件进行drawables并在所有目录中使用.png文件hdpi mdpi ldpi ..
答案 6 :(得分:3)
我得到了同样的错误,但对我来说问题是约束布局。我将其更改为Relative Layout
以解决问题。
答案 7 :(得分:1)
@Nikolai的回答对我很有帮助,确实是问题所在。 我遇到过同样的问题。通知中可以使用特定的控件。我的布局中有一个视图,如下所示。
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.04"/>
我将其删除,并且效果很好。希望对别人有帮助。
答案 8 :(得分:0)
使用Vector drawables时要小心。在Lollipop之前的设备上,通过NotificationCompat.Builder
方法设置图标,例如setSmallIcon
,会导致此崩溃。如果在自定义视图中使用Vector drawables,您将遭遇同样的崩溃。
答案 9 :(得分:0)
我在通知中显示自定义布局时遇到了同样的问题,发现的是:
我将 ConstraintsLayout 用作自定义通知的根目录布局,这是我犯的错误。由于要在android中使用约束布局存在一些限制。
最后,我将根布局更改为 RelativeLayout ,并且我的通知显示得很完美。我已将我的观点附在下面的屏幕截图中。
答案 10 :(得分:0)
在我的情况下,问题是通话之间的不一致
setShowActionsInCompactView(0)
然后.addAction
调用...操作次数不同,因此会出现错误
答案 11 :(得分:0)
我看到与此主题相关的很多麻烦,在我看来,这个问题是由使用
引起的CREATE TABLE tbl (
Player INTEGER,
EventId INTEGER,
Points INTEGER,
PRIMARY KEY(player,eventid)
);
INSERT INTO tbl
(Player, EventID, Points)
VALUES
(1, 1, 15),
(2, 1, 5),
(1, 2, 8),
(2, 2, 9),
(1, 3, 15),
(2, 3, 5),
(1, 4, 9),
(2, 4, 12),
(1, 5, 8),
(2, 5, 9),
(1, 6, 14),
(2, 6, 15);
-- Exclusively for versions of MySQL prior to 8.0 --
SELECT player
, SUM(CASE WHEN i <=3 THEN points END) best3
, SUM(CASE WHEN i <=5 THEN points END) best5
FROM
( SELECT x.*
, CASE WHEN @prev = player THEN @i:=@i+1 ELSE @i:=1 END i
, @prev:=player prev
FROM tbl x
, (SELECT @prev:=null,@i:=0) vars
ORDER
BY player
, points DESC
) n
GROUP
BY player;
+--------+-------+-------+
| player | best3 | best5 |
+--------+-------+-------+
| 1 | 44 | 61 |
| 2 | 36 | 50 |
+--------+-------+-------+
我在我的android:background="?attr/selectableItemBackground"
上使用了它,每次我的应用崩溃时,但是当我删除它时,一切都很好,我想问题是您不应该使用任何自定义ImageButton
类型或任何主题属性根据您的观点,我希望这将有助于另一个解决此问题的人
答案 12 :(得分:0)
对于较旧的android版本,请勿使用XML vector 可绘制对象。它将使应用程序崩溃。使用PNG
答案 13 :(得分:0)
对我来说,问题出在我设置为iframe
的操作图标与所有设备都不兼容。我使用 Andriod Studio->文件->新建->图片资产生成图标,然后就可以了。
答案 14 :(得分:0)
就我而言 在 addAction icon(1st arg) 是问题所在。 我将其更改为 png,它起作用了。 然后用 0 试了一下,也行。
答案 15 :(得分:-2)
通常,此错误表示您的contentView错误,请检查它! 也许你最好用一个只包含TextView的布局替换你的contentView.Ok,运行它,希望对你有帮助。