2015-08-13 10 views
13

Da due giorni sto cercando di ottenere questo. Ma ho fallito. Per favore qualcuno mi suggerisce come ottenere l'immagine nella notifica push. Grazie in anticipo.Come mostrare l'immagine nella notifica push (Gcm) Android?

enter image description here

Codice quello che ho provato:

@SuppressWarnings("deprecation") 
private void handleMessage(Context mContext, Intent intent) { 
    Bitmap remote_picture = null; 
    long when = System.currentTimeMillis(); 
    int icon = R.drawable.reload_logo; 
    try { 
     Bundle gcmData = intent.getExtras(); 
     if(intent.getExtras().getString("message")!=null) 
      Log.v("TAG_IMAGE", "" + intent.getExtras().getString("message")); 
     Log.v("TAG_IMAGE", "" + intent.getExtras().getString("imageurl")); 


     { 
      NotificationCompat.BigPictureStyle notiStyle = new NotificationCompat.BigPictureStyle(); 
      notiStyle.setSummaryText(intent.getExtras().getString("message")); 

      try { 
       remote_picture = BitmapFactory.decodeStream((InputStream) new URL(intent.getExtras().getString("imageurl")).getContent()); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      notiStyle.bigPicture(remote_picture); 
      notificationManager = (NotificationManager) mContext 
        .getSystemService(Context.NOTIFICATION_SERVICE); 
      PendingIntent contentIntent = null; 

      Intent gotoIntent = new Intent(); 
      gotoIntent.setClassName(mContext, "com.reloadapp.reload.fragments.MainActivity");//Start activity when user taps on notification. 
      contentIntent = PendingIntent.getActivity(mContext, 
        (int) (Math.random() * 100), gotoIntent, 
        PendingIntent.FLAG_UPDATE_CURRENT); 
      NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
        mContext); 
      Notification notification = mBuilder.setSmallIcon(icon).setTicker("Reload.in").setWhen(0) 
        .setAutoCancel(true) 
        .setContentTitle("Reload.in") 
        .setStyle(new NotificationCompat.BigTextStyle().bigText(intent.getExtras().getString("message"))) 
        .setContentIntent(contentIntent) 
        .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) 
        .setLargeIcon(remote_picture) 
        .setContentText(intent.getExtras().getString("message")) 
        .setStyle(notiStyle).build(); 


      notification.flags = Notification.FLAG_AUTO_CANCEL; 
      count++; 
      notificationManager.notify(count, notification);//This will generate seperate notification each time server sends. 
     } 
    }catch (Throwable e) { 
     e.printStackTrace(); 
    } 
} 

sto ottenendo piccola icona e grande icona sono stessa immagine con. Ma ho dato diversi.

risultato:

+0

favore, qualcuno mi aiuti. –

+0

Per favore spiega le cose che hai già provato? – Emil

+1

Hai provato a passare un 'json String' contenente l'URL dell'immagine come ** messaggio ** e ne analizzi? – Emil

risposta

16

grazie @Ravi.

@SuppressWarnings("deprecation") 
    private void handleMessage(Context mContext, Intent intent) { 
     Bitmap remote_picture = null; 
     long when = System.currentTimeMillis(); 
     int icon = R.drawable.reload_logo; 
     Bundle gcmData = intent.getExtras(); 
     //if message and image url 
     if(intent.getExtras().getString("message")!=null && intent.getExtras().getString("imageurl")!=null) { 
      try { 


       Log.v("TAG_IMAGE", "" + intent.getExtras().getString("message")); 
       Log.v("TAG_IMAGE", "" + intent.getExtras().getString("imageurl")); 


       NotificationCompat.BigPictureStyle notiStyle = new NotificationCompat.BigPictureStyle(); 
       notiStyle.setSummaryText(intent.getExtras().getString("message")); 

       try { 
        remote_picture = BitmapFactory.decodeStream((InputStream) new URL(intent.getExtras().getString("imageurl")).getContent()); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
       notiStyle.bigPicture(remote_picture); 
       notificationManager = (NotificationManager) mContext 
         .getSystemService(Context.NOTIFICATION_SERVICE); 
       PendingIntent contentIntent = null; 

       Intent gotoIntent = new Intent(); 
       gotoIntent.setClassName(mContext, "com.reloadapp.reload.fragments.MainActivity");//Start activity when user taps on notification. 
       contentIntent = PendingIntent.getActivity(mContext, 
         (int) (Math.random() * 100), gotoIntent, 
         PendingIntent.FLAG_UPDATE_CURRENT); 
       NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
         mContext); 
       Notification notification = mBuilder.setSmallIcon(icon).setTicker("Reload.in").setWhen(0) 
         .setAutoCancel(true) 
         .setContentTitle("Reload.in") 
         .setStyle(new NotificationCompat.BigTextStyle().bigText(intent.getExtras().getString("message"))) 
         .setContentIntent(contentIntent) 
         .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) 

         .setContentText(intent.getExtras().getString("message")) 
         .setStyle(notiStyle).build(); 


       notification.flags = Notification.FLAG_AUTO_CANCEL; 
       count++; 
       notificationManager.notify(count, notification);//This will generate seperate notification each time server sends. 

      } catch (Throwable e) { 
       e.printStackTrace(); 
      } 
     } 
} 

per il multi linea:

.setStyle(new NotificationCompat.BigTextStyle().bigText(intent.getExtras().getString("message"))) // use this 
+2

Quali dovrebbero essere le dimensioni di questa immagine in modo che possa dare un aspetto simile a tutti i dispositivi Android con il ritaglio? –

+0

la dimensione dell'immagine nella notifica è fissa o no? –

+0

Si chiama .setStyle() due volte qui; una volta per bigText e una volta per bigPicture. È intenzionale? – Project