I try to create a custom notification but getting the following exception:
FATAL EXCEPTION: main
android.app.RemoteServiceException: Bad notification posted from package com.my.app: Couldn't expand RemoteViews for: StatusBarNotification(pkg=com.my.app user=UserHandle{0} id=1 tag=null score=0: Notification(pri=0 contentView=com.my.app/0x7f03001b vibrate=null sound=null defaults=0x0 flags=0x2 kind=[null]))
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1423)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
My code looks like this:
Intent intent = new Intent(this, MyFragmentActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent launchIntent = PendingIntent.getActivity(this, 0, intent, 0);
RemoteViews notificationView = new RemoteViews(this.getPackageName(), R.layout.notification_layout);
notificationView.setImageViewBitmap(R.id.notification_icon, icon);
notificationView.setTextViewText(R.id.present_text, "Text Test");
Notification.Builder builder = new Notification.Builder(getApplicationContext());
builder
.setContentTitle("Titel Test")
.setSmallIcon(R.drawable.ic_launcher_icon)
.setContentIntent(launchIntent)
.setOngoing(true)
.setWhen(0)
.setTicker("ticker Test")
.setContent(notificationView);
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(NOTIFICATION_ID, builder.getNotification());
The layout looks as follows:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/notification_icon"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true" />
<EditText
android:id="@+id/present_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/notification_icon"
android:gravity="center_vertical" />
</RelativeLayout>
I'm running android 4.3. I've tried before with NotificationCompat and get the same error.
Does someone has an idea?
For me, it was because I was setting the text inside the remoteViews TextViews incorrectly. I was doing this:
Using one of these methods solved it for me:
I've found that using android:background="?attr/colorPrimaryDark" also causes a crash. When changed to android:background="@color/colorPrimaryDark" it stopped crashing.
Not all views can be used in RemoteViews. A RemoteViews object can support the following layout classes:
FrameLayout
LinearLayout
RelativeLayout
GridLayout
AnalogClock
Button
Chronometer
ImageButton
ImageView
ProgressBar
TextView
ViewFlipper
ListView
GridView
StackView
AdapterViewFlipper
You can't use other layout classes like
EditText
or CustomViews.You cannot put an
EditText
into aRemoteViews
.RemoteViews
is limited to a handful of possible widgets, specifically those documented for use on an app widget. And, for aNotification
, I doubt that theAdapterView
options, likeListView
, will work either.If you have a ScrollView amongst your RemoteViews, remove it. This worked for me.