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)?
Interessant. Wie oft wird die Benachrichtigung nicht angezeigt (Prozess wie in Ihrem Post getötet)? –
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
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. –