webentwicklung-frage-antwort-db.com.de

RemoteViews konnten nicht erweitert werden

Ich versuche, eine benutzerdefinierte Benachrichtigung zu erstellen, erhalte jedoch die folgende Ausnahme:

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)

Mein Code sieht so aus:

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());

Das Layout sieht wie folgt aus:

<?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>

Ich verwende Android 4.3. Ich habe vorher mit NotificationCompat versucht und den gleichen Fehler erhalten.

Hat jemand eine Idee?

18
samo

Sie können eine EditText nicht in eine RemoteViews setzen. RemoteViews ist auf eine Handvoll möglicher Widgets beschränkt, insbesondere die für die Verwendung in einem App-Widget dokumentiert sind . Und für eine Notification bezweifle ich, dass die AdapterView-Optionen, wie ListView, ebenfalls funktionieren werden.

45
CommonsWare

Für mich lag das daran, dass ich den Text in den RemoteViews-TextViews falsch eingestellt habe. Ich habe das gemacht:

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

Mit einer dieser Methoden löste es mich:

remoteViews.setCharSequence(R.id.txt, "setText", "text");
//Or simply:
remoteViews.setTextViewText(R.id.txt, "text");
3
iTurki

In RemoteViews können nicht alle Ansichten verwendet werden. Ein RemoteViews-Objekt kann die folgenden Layoutklassen unterstützen:

FrameLayout

LinearLayout

RelativesLayout

Gitterstruktur

Analoge Uhr

Taste

Chronometer

ImageButton

Bildansicht

Fortschrittsanzeige

Textvorschau

ViewFlipper

Listenansicht

Rasteransicht

StackView

AdapterViewFlipper

Sie können keine anderen Layout-Klassen wie Edittext oder CustomViews verwenden.

Wenn Sie eine ScrollView in Ihren RemoteViews haben, entfernen Sie diese. Das hat bei mir funktioniert.

0

Ich habe festgestellt, dass die Verwendung von Android: background = "? Attr/colorPrimaryDark" ebenfalls zum Absturz führt. Bei der Umstellung auf Android: background = "@ color/colorPrimaryDark" ist der Absturz beendet.

0
user3193413