2015-01-11 13 views
6

Questa domanda è stata posta prima ma nessuna delle risposte mi ha aiutato a pubblicare il mio caso.Impossibile espandere RemoteViews per: StatusBarNotification

Sto cercando di creare una notifica personalizzata utilizzando un file di layout. Ma ottengo l'errore:

android.app.RemoteServiceException: Bad notification posted from package com.eswaraj.app.eswaraj: Couldn't expand RemoteViews for: StatusBarNotification(pkg=com.eswaraj.app.eswaraj user=UserHandle{0} id=8888 tag=null score=0: Notification(pri=0 contentView=com.eswaraj.app.eswaraj/0x7f030052 vibrate=null sound=null defaults=0x0 flags=0x0 kind=[null]))

mio file di layout è

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:gravity="left"> 

<com.makeramen.RoundedImageView 
    android:id="@+id/nImage" 
    android:layout_width="100dp" 
    android:layout_height="100dp" 
    android:src="@drawable/profile_image" 
    android:padding="15dp" 
    android:scaleType="fitCenter" 
    app:riv_corner_radius="30dip" 
    app:riv_border_width="2dip" 
    app:riv_border_color="#333333" 
    app:riv_mutate_background="true" 
    app:riv_oval="true"/> 

<TextView 
    android:id="@+id/nTitle" 
    android:text="eSwaraj: Your voice is heard" 
    android:layout_toRightOf="@+id/nImage" 
    android:paddingTop="12dp" 
    android:textSize="20dp" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

<TextView 
    android:id="@+id/nMessage" 
    android:layout_below="@+id/nTitle" 
    android:layout_toRightOf="@+id/nImage" 
    android:text="Your comaplaint viewed" 
    android:textSize="15dp" 
    android:paddingTop="5dp" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

<TextView 
    android:id="@+id/nTime" 
    android:layout_toRightOf="@+id/nImage" 
    android:layout_below="@+id/nMessage" 
    android:textSize="13dp" 
    android:paddingTop="5dp" 
    android:text="12:23PM" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

</RelativeLayout> 

E io mando notifica come segue:

public void sendNotification(Context caller, Class<?> activityToLaunch, Bitmap icon, GcmMessageDto gcmMessageDto, int id) { 
     Intent toLaunch; 
     RemoteViews remoteViews = new RemoteViews(caller.getPackageName(), R.layout.notification); 
     if(activityToLaunch != null) { 
      toLaunch = new Intent(caller, activityToLaunch); 
     } 
     else { 
      toLaunch = new Intent(); 
     } 
     PendingIntent intentBack = PendingIntent.getActivity(caller, 0, toLaunch, 0); 

     NotificationManager notifier = (NotificationManager) caller.getSystemService(Context.NOTIFICATION_SERVICE); 
     NotificationCompat.Builder mBuilder = 
       new NotificationCompat.Builder(caller) 
        .setSmallIcon(android.R.drawable.ic_notification_overlay) 
        .setContentIntent(intentBack); 

     remoteViews.setTextViewText(R.id.nMessage, gcmMessageDto.getMessage()); 
     remoteViews.setTextViewText(R.id.nTime, new Date().toString()); 
     if(icon != null) { 
      remoteViews.setImageViewBitmap(R.id.nImage, icon); 
     } 
     mBuilder.setContent(remoteViews); 

     notifier.notify(id, mBuilder.build()); 
    } 

Qualsiasi aiuto sarebbe apprezzato.

risposta

14

Poco parole, il

com.makeramen.RoundedImageView

si scherzi con il vostro lavoro.

Non tutte le visualizzazioni possono essere utilizzate in RemoteViews utilizzate per la creazione di notifiche personalizzate. Secondo this official page solo la seguente può essere utilizzato per RemoteViews creando:

  • FrameLayout
  • LinearLayout
  • RelativeLayout
  • GridLayout
  • AnalogClock
  • pulsante
  • cronometro
  • ImageButton
  • 0.123.
  • ImageView
  • ProgressBar
  • TextView
  • ViewFlipper
  • ListView
  • GridView
  • StackView
  • AdapterViewFlipper

Quindi è necessario trovare una soluzione per la vostra classe ImageView modificato e l'uso invece ImageView semplice.

+0

Nel mio caso, stavo usando 'AppCompatImageView'. Passare a 'ImageView' ha risolto il problema. – iTurki