【问题标题】:Bad notification posted - Couldn't expand RemoteViews for: StatusBarNotification已发布错误通知 - 无法扩展 RemoteViews:StatusBarNotification
【发布时间】:2011-06-02 01:55:59
【问题描述】:

我正在尝试从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;

我正在从onHandleIntent() 拨打notify(),并取消onDestroy() 中的通知。

我已验证此代码在没有IntentService 的独立应用程序中有效。在IntentService 中这样做会带来一些麻烦。

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

【问题讨论】:

    标签: android android-service android-notifications


    【解决方案1】:

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

    我一改变:

    android:layout_height="@dimen/notification_expanded"

    android:layout_height="match_parent"

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

    还可以查看this example,查看使用自定义布局通知的简单示例。

    【讨论】:

    • 在 android 5.0+ 中,我无法修复这个 Couldn't expand RemoteViews for: StatusBarNotificationerror,直到我将自定义视图根的高度设置为 android:layout_height="64dp"...但我没有遇到低于 5.0 的错误,这很奇怪。
    【解决方案2】:

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

    【讨论】:

    • 你拯救了我的一天......非常感谢......但我不知道背后的原因......为什么自定义视图不需要 dimen?
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      在我的例子中,我可以通过将我提供的图标大小减小到.setSmallIcon();来修复这个错误

      【讨论】:

      【解决方案5】:

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

      如果您想使用RemoteView 创建自定义通知,可以使用这里的list of layout items

      清洁项目和将layout_height 设置为match_parent 都对我不起作用。

      【讨论】:

        【解决方案6】:

        我遇到了同样的问题。就我而言:

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

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

            android:background="?attr/selectableItemBackground" 
            

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

            【讨论】:

            • 我遇到了同样的问题,我正在使用 android:background 的属性,所以删除它解决了我的问题
            【解决方案9】:

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

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

            这是导致崩溃的原因。 支持以下布局和控件:

            据此official documentation

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

            【讨论】:

              【解决方案10】:

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

              【讨论】:

                【解决方案11】:

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

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

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

                【讨论】:

                  【解决方案12】:

                  在我的情况下,问题是调用之间的不一致

                  setShowActionsInCompactView(0)
                  

                  .addAction 调用...操作的数量不同,因此出现错误

                  【讨论】:

                    【解决方案13】:

                    不要将 XML vector 可绘制对象用于旧的 android 版本。它会使应用程序崩溃。使用 PNG

                    【讨论】:

                      【解决方案14】:

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

                      【讨论】:

                        【解决方案15】:

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

                        【讨论】:

                          【解决方案16】:

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

                          【讨论】:

                          • 嗨Guu,您能详细说明要替换什么以及为什么可以解决错误吗?您的回答被要求审核,但它没有提供解决问题的明确方法。
                          • 好的...我的意思是,当我想显示通知时,我需要一个新的通知对象,并提供一个 RemoteViews,如下所示:
                          • 抱歉,还没完。 RemoteViews 像这样:RemoteViews contentView = new RemoteViews(getPackageName(),R.layout.notifi_upload);我的问题是布局notifi_upload有错误,可能你的布局比较复杂,所以我建议你在布局中放一个TextView。运行它,希望对你有所帮助。
                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 2018-06-15
                          • 2018-04-03
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多