Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Couldn't expand RemoteViews

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?

like image 674
samo Avatar asked Sep 01 '13 11:09

samo


3 Answers

You cannot put an EditText into a RemoteViews. RemoteViews is limited to a handful of possible widgets, specifically those documented for use on an app widget. And, for a Notification, I doubt that the AdapterView options, like ListView, will work either.

like image 82
CommonsWare Avatar answered Oct 23 '22 13:10

CommonsWare


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.

like image 35
Faxriddin Abdullayev Avatar answered Oct 23 '22 11:10

Faxriddin Abdullayev


For me, it was because I was setting the text inside the remoteViews TextViews incorrectly. I was doing this:

remoteViews.setString(R.id.txt, "setText", "text");

Using one of these methods solved it for me:

remoteViews.setCharSequence(R.id.txt, "setText", "text");
//Or simply:
remoteViews.setTextViewText(R.id.txt, "text");
like image 20
iTurki Avatar answered Oct 23 '22 11:10

iTurki