2013-04-17 13 views
5

Non riesco a creare una notifica con Stili di visualizzazione grandi. Supporta problemi di libreria? Il mio codice è ok in Eclipse (nessun errore) ma la notifica mostra solo il contentTitle, il ContentText, l'icona ... il gioco è fatto! Nessuna riga in più nella mia notifica ... Cosa c'è che non va? Grazie mille per la tua risposta. Ecco il codice ...Non riesco a impostare Big View Styles

@Override 
protected void onMessage(Context arg0, Intent arg1) { 
    // TODO Auto-generated method stub 
    //Log.d("onMessage", String.valueOf(arg1)); 
    //Log.d("onMessage", "Receive a message"); 
    // Get the data from intent and send to notification bar 
    String message = arg1.getExtras().getString("message"); 
    generateNotification3(arg0, message); 
} 


private static void generateNotification3(Context context, String message) {  
    NotificationCompat.Builder mbuilder = 
      new NotificationCompat.Builder(context) 
      .setSmallIcon(R.drawable.ic_launcher) 
      .setContentTitle("lolo") 
      .setContentText("text") 
      .setDefaults(Notification.DEFAULT_ALL) // requires VIBRATE permission 
      /* 
      * Sets the big view "big text" style and supplies the 
      * text (the user's reminder message) that will be displayed 
      * in the detail area of the expanded notification. 
      * These calls are ignored by the support library for 
      * pre-4.1 devices. 
      */ 
      .setStyle(new NotificationCompat.BigTextStyle() 
        .bigText(message)); 

    // Creates an explicit intent for an Activity in your app 
     Intent resultIntent = new Intent(context, Fsa.class); 

     // The stack builder object will contain an artificial back stack for 
     // the 
     // started Activity. 
     // This ensures that navigating backward from the Activity leads out of 
     // your application to the Home screen. 
     TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); 

     // Adds the back stack for the Intent (but not the Intent itself) 
     stackBuilder.addParentStack(Fsa.class); 

     // Adds the Intent that starts the Activity to the top of the stack 
     stackBuilder.addNextIntent(resultIntent); 
     PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, 
       PendingIntent.FLAG_UPDATE_CURRENT); 
     mbuilder.setContentIntent(resultPendingIntent); 

     NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 

     // mId allows you to update the notification later on. 
     mNotificationManager.notify(100, mbuilder.build()); 

} 
+10

Si è tentato di espandere la notifica manualmente (toccarla con due dita affiancate e trascinare verso il basso)? Le notifiche si espandono automaticamente solo se compaiono in cima all'elenco. – dsandler

+1

Accidenti! hai ragione !!! Eccellente !!!! C'è un modo per espanderlo programmaticamente? Ho aggiunto .setOngoing (true) (in alto) ma non è espanso ... (non proprio il massimo perché il primo è una notifica quando sono collegato a USB per lo sviluppo degli strumenti). Grazie ancora amico mio! – Kris88

+0

No, non c'è modo di espanderlo a livello di programmazione. L'idea è che la politica di espansione dipenda dall'utente e dall'interfaccia utente del sistema; le app dovrebbero solo fornire i dati. – dsandler

risposta

14

Secondo la documentazione ufficiale here, "grande vista appare solo quando la notifica è espansa, che avviene quando la notifica è nella parte superiore del cassetto di notifica, o quando l'espansione degli utenti la notifica con un gesto " Quindi, per avere lo stile Big View, la notifica deve essere posta in cima all'elenco.

Per fare questo, quando si crea la notifica si prega di aggiungere:

setPriority(Notification.PRIORITY_MAX) 

modo verrà posizionato sempre nella posizione in cima alla lista quando viene ricevuto (ovviamente se l'utente non si apre il cassetto delle notifiche e altre notifiche con priorità massima arrivano, quindi non è garantito che il tuo sarà ancora in alto).

+0

Questo non garantisce che andrà in cima alla lista, è contro le migliori pratiche. Il flag P_MAX non deve essere utilizzato nel caso e anche in questo caso ci sono molte volte in cui questo non funzionerebbe (es. Flag di evento in corso). Questa domanda è ancora valida e aperta come tale. Se si dispone di una soluzione funzionante, si prega di modificare il tuo post. – Japes