GCM push notification. Bad notification posted – Couldn't expand RemoteViews for: StatusBarNotification

The requirement was to make a custom notification since the android‘s default notification only allows for an image. So I went through on how to attach a custom UI for notification when expanded, the ready answer was to create a custom view and pass to the notification manager and allowed from API level 16. So I did one and here the my layout xml code – filename: notification_custom_view_new:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/GhostWhite">

<RelativeLayout
    android:id="@+id/header"
    android:layout_width="match_parent"
    android:layout_height="65dp">

    <ImageView
        android:id="@+id/big_icon"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_centerVertical="true"
        android:layout_marginLeft="12dp"
        android:scaleType="fitCenter" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignBottom="@+id/big_icon"
        android:layout_alignTop="@+id/big_icon"
        android:layout_toRightOf="@+id/big_icon"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:paddingLeft="16dp"
        android:paddingRight="16dp"
        android:weightSum="2">

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1.6"
            android:orientation="vertical">

            <TextView
                android:id="@+id/title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ellipsize="end"
                android:maxLines="1"
                android:text="Title"
                android:textColor="@color/colorBlackDimText"
                android:textSize="16sp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/message"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ellipsize="end"
                android:maxLines="2"
                android:paddingTop="2dp"
                android:text="message"
                android:textColor="@color/colorBlackDimText"
                android:textSize="14sp" />

        </LinearLayout>

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.4"
            android:gravity="center">

            <TextView
                android:id="@+id/time"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ellipsize="end"
                android:maxLines="2"
                android:padding="8dp"
                android:text="24:59"
                android:textColor="@color/colorBlackDimText"
                android:textSize="12sp" />

        </LinearLayout>

    </LinearLayout>

</RelativeLayout>

<View
    android:id="@+id/shadow"
    android:layout_width="match_parent"
    android:layout_height="5dp"
    android:layout_below="@+id/header"
    android:background="@drawable/shadow" />

<ImageView
    android:id="@+id/big_picture"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/header"
    android:src="@drawable/vector_icon_collections"
    android:minHeight="240dp"
    android:scaleType="fitCenter" />
</RelativeLayout>

The way I referenced it in code:

  • unchecked cast warning - how to avoid this?
  • Text view with different colored texts in xml code
  • OnActionExpandListener in menuitem not working. How to fix it?
  • EditText vs TextView
  • Get GCM canonical registration ID without sending a message
  • Android animated GIF support
  • private RemoteViews assignRemote(Bitmap bitmap, String title, String message){
        RemoteViews expandedView = new RemoteViews(Application.getInstance().getPackageName(),
                R.layout.notification_custom_view_new);
        expandedView.setTextViewText(R.id.title, title);
        expandedView.setTextViewText(R.id.message, message);
        expandedView.setImageViewBitmap(R.id.big_picture, bitmap);
        expandedView.setImageViewResource(R.id.big_icon, R.mipmap.ic_launcher);
        expandedView.setTextViewText(R.id.time, getOnlyHrsMin());
        return expandedView;
    }
    

    assigning customview to notification manager:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            notification.bigContentView = assignRemote(bitmap, title, message);
        }
    

    But this gave me error saying bad notification, I have identified over 15+ same question here on stackoverflow without a right answer.. Some suggest it to be a resource missing and hence the error. I am sure from my end none of the values are null nor resources missing errors are not there in my remote view that is passed.

    Any help will be appreciated and also I have tried for around a couple of days to track the error but nothing good seems to happen. Please help me!

    Notification Obj Init:

    NotificationCompat.BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle();
        bigPictureStyle.setBigContentTitle(title);
        bigPictureStyle.setSummaryText(Html.fromHtml(message).toString());
        bigPictureStyle.bigPicture(bitmap);
        Notification notification;
        notification = mBuilder.setSmallIcon(icon).setTicker(title).setWhen(0)
                .setAutoCancel(true)
                .setContentTitle(title)
                .setContentIntent(resultPendingIntent)
                .setSound(alarmSound)
                .setLights(Color.WHITE, 1500, 2000)
                //.setStyle(bigPictureStyle)
                .setWhen(getTimeMilliSec(timeStamp))
                .setSmallIcon(iconToUse())
                .setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), icon))
                .setContentText(message)
                .build();
    
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            notification.bigContentView = assignRemote(bitmap, title, message);
        }
    
        NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(Config.NOTIFICATION_ID_BIG_IMAGE, notification);
    

    Stacktrace:

     android.app.RemoteServiceException: Bad notification posted from package com.goldadorn.main: Couldn't expand RemoteViews for: StatusBarNotification(pkg=com.goldadorn.main user=UserHandle{0} id=101 tag=null score=0 key=0|com.goldadorn.main|101|null|10220: Notification(pri=0 contentView=com.goldadorn.main/0x1090077 vibrate=null sound=android.resource://com.goldadorn.main/raw/notification defaults=0x0 flags=0x11 color=0x00000000 vis=PRIVATE))
                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1480)
                                                                      at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                      at android.os.Looper.loop(Looper.java:135)
                                                                      at android.app.ActivityThread.main(ActivityThread.java:5343)
                                                                      at java.lang.reflect.Method.invoke(Native Method)
                                                                      at java.lang.reflect.Method.invoke(Method.java:372)
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
    

    Attaching screenshot of the layout UI look:

    layout UI

    Related posts:

    onScroll gets called when I set listView.onScrollListener(this), but without any touch
    Set app background to be the same as home screen wallpaper
    Create &ldquo;ok glass&rdquo; style menu, within glass app
    Eclipse reports rendering library more recent than ADT plug-in
    ImageView in circular through xml
    Is local storage for a Phonegap app on an Android device separate from the built in browser?
  • How to know if a sensor is present on my Android device?
  • Error code -7 when trying to install release APK
  • Google Android USB Driver and ADB
  • Same option menu in all Activities in Android
  • Android ViewPager scrolling issue with only one item when using getPageWidth from PagerAdapter
  • What is coredata equivalent for android
  • 2 Solutions collect form web for “GCM push notification. Bad notification posted – Couldn't expand RemoteViews for: StatusBarNotification”

    Remove the ‘View’ you are using as a shadow in your layout(or Replace View with TextView) and it works fine. XML used for Remoteview should make use of Views which has @android.widget.RemoteViews.RemoteView annotation. Since a plain View does not has this annotation, you cannot use that in your xml.

    You cannot put an EditText into a RemoteViews. RemoteViews is limited to a handful of possible widgets, for a Notification, I doubt that the AdapterView options, like ListView, will work either.have a look here. Hope this will help you as per my experience.

    Android Babe is a Google Android Fan, All about Android Phones, Android Wear, Android Dev and Android Games Apps and so on.