2013-09-01 11 views
18

próbuję utworzyć zgłoszenie niestandardowy ale otrzymuję następujący wyjątek:Nie można poszerzyć RemoteViews

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) 

Mój kod wygląda następująco:

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

Układ wygląda następująco:

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

Używam Androida 4.3. Próbowałem wcześniej z NotificationCompat i uzyskać ten sam błąd.

Czy ktoś ma pomysł?

+0

Proszę wpisać "res/layout/notification_layout.xml". – CommonsWare

+0

Dodałem układ. – samo

+1

I nie zapomnij, nie dodawaj vectorDrawables do powiadomienia, robi się ten sam wyjątek. –

Odpowiedz

42

Nie można umieścić EditText w RemoteViews. RemoteViews ogranicza się do kilku możliwych widżetów, w szczególności those documented for use on an app widget. I, dla Notification, wątpię, że opcje AdapterView, takie jak ListView, będą działać.

+0

Dzięki. Zastąpienie EditText przez TextView rozwiązuje go. – samo

+0

Doskonała odpowiedź !! –

3

Dla mnie było to spowodowane tym, że nieprawidłowo ustawiłem tekst w oknie RemoteViews TextViews. Robiłem to:

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

Korzystanie z tych metod rozwiązać go dla mnie:

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

Używanie 'setCharSequence' zamiast' setTextViewText' zadziałało dla mnie. – Miguelos

0

Nie wszystkie poglądy mogą być stosowane w RemoteViews. Obiekt RemoteViews może obsługiwać następujące klasy układ:

FrameLayout

LinearLayout

RelativeLayout

GridLayout

AnalogClock

Przycisk

chronometru

ImageButton

ImageView

ProgressBar

TextView

ViewFlipper

ListView

GridView

StackView

AdapterViewFlipper

nie można używać innych klas układ jak EditText lub CustomViews.

0

Odkryłem, że używanie Androida: background = "atr/colorPrimaryDark" powoduje również awarię. Po zmianie na android: background = "@ color/colorPrimaryDark" przestał się zawieszać.

Powiązane problemy