J'essaie de créer une notification personnalisée en obtenant l'exception suivante:
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)
Mon code ressemble à ceci:
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());
La mise en page se présente comme suit:
<?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>
Je suis sous Android 4.3. J'ai déjà essayé avec NotificationCompat et j'obtiens la même erreur.
Est-ce que quelqu'un a une idée?
Vous ne pouvez pas mettre une EditText
dans une RemoteViews
. RemoteViews
est limité à une poignée de widgets possibles, en particulier ceux documentés pour une utilisation sur un widget d'application . Et, pour un Notification
, je doute que les options AdapterView
, comme ListView
, fonctionnent également.
Pour moi, c’est parce que j’ai mal défini le texte dans remoteViews TextViews. Je faisais ceci:
remoteViews.setString(R.id.txt, "setText", "text");
L'utilisation de l'une de ces méthodes a résolu le problème pour moi:
remoteViews.setCharSequence(R.id.txt, "setText", "text");
//Or simply:
remoteViews.setTextViewText(R.id.txt, "text");
Toutes les vues ne peuvent pas être utilisées dans RemoteViews. Un objet RemoteViews peut prendre en charge les classes de présentation suivantes:
FrameLayout
LinearLayout
Disposition relative
Disposition de la grille
Horloge analogique
Bouton
Chronomètre
ImageButton
ImageView
Barre de progression
Affichage
ViewFlipper
ListView
GridView
StackView
AdapterViewFlipper
Vous ne pouvez pas utiliser d'autres classes de mise en page comme Edittext ou CustomViews.
J'ai constaté que l'utilisation d'Android: background = "? Attr/colorPrimaryDark" provoque également un blocage. Sous Android: background = "@ color/colorPrimaryDark", le plantage a cessé.