1

Ich verwende einen GcmReceiver mit einem Listener, der GcmListenerService erweitert. In meiner onMessageReceived-Methode möchte ich ein Remote-Bild (mit Picasso lib) herunterladen und nach dem Herunterladen des Bildes eine Benachrichtigung an den Benutzer senden.Bild in GcmListenerService herunterladen und Benachrichtigung notieren

Code:

public class MainGcmListenerService extends GcmListenerService { 
    @Override 
    public void onMessageReceived(String from, Bundle data) { 
     String urlImage = data.getString("image_url"); 
     final Target target = new Target() { 
      @Override 
      public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) ...... // build a notification with the downloaded image as a logo 
        NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
        mNotificationManager.notify(notificationType.getValue(), mBuilder.build()); 
      } 
     }; 
     Handler uiHandler = new Handler(Looper.getMainLooper()); 
     uiHandler.post(new Runnable() { 
      @Override 
      public void run() { 
       Picasso.with(context).load(urlImage) 
         .into(target); 
      } 
     }); 

Dieser Code funktioniert gut die meiste Zeit, aber manchmal die Meldung nicht gebucht wird. Ich nehme an, dass dies aufgrund der Tatsache ist, dass der GCM-Nachrichtenthread beendet wird, bevor der Download-Image-Task beendet ist. Was wäre ein richtiger Weg, um einen solchen Prozess in einem GcmListenerService zu implementieren (ein Image in onMessageReceived herunterladen und dann die Benachrichtigung veröffentlichen, sobald sie fertig ist)?

+0

Interessant. Wie oft wird die Benachrichtigung nicht angezeigt (Prozess wie in Ihrem Post getötet)? –

+0

Ich sehe etwa 5% der Nutzer pro Push-Benachrichtigung. Ich nehme an, dies ist die Ursache (da ich sehe, dass sie das Empfangen der gcm, aber die lokale Benachrichtigung wird nicht angezeigt) – Ohad

+0

Es ist schwer, eine definitive Antwort zu liefern .. Die Art, wie Picasso funktioniert, kann auch auf die Internetverbindung der abhängen Empfangsgerät, besteht immer noch die Möglichkeit, dass der Prozess beendet wird. Was ich jedoch in Ihrer Situation tun würde, ist ein "Standardbild", das angezeigt wird, wenn eine bestimmte Zeit verstrichen ist, um sicherzustellen, dass eine Benachrichtigung angezeigt wird. –

Antwort

0

Es ist schwer, eine definitive und vollständige Antwort zu geben. So wie Picasso funktioniert, kann es auch auf die Internetverbindung des Empfangsgerätes ankommen, da immer noch eine Chance besteht, dass der Vorgang beendet wird.

Was ich in Ihrer Situation tun würde, ist ein Standardbild in der Client-App für die Notification verwendet werden, wenn innerhalb einer bestimmten Zeit bereits verstrichen ist und das Bild noch nicht vollständig heruntergeladen wird, nur um sicherzustellen, dass ein Notification angezeigt wird.

Sehr interessiert daran, wie das geht. Viel Glück. Prost! : D