在GcmListenerService中下载图像并发布通知

时间:2016-05-06 08:36:10

标签: android google-cloud-messaging picasso gcmlistenerservice

我正在使用带有扩展GcmListenerService的侦听器的GcmReceiver。 在我的onMessageReceived方法中,我想下载一个远程图像(使用Picasso lib),一旦下载了图像,就向用户发布通知。

代码:

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);
            }
        });

此代码在大多数情况下运行良好,但有时通知不会发布。我假设这是由于GCM消息线程在下载映像任务完成之前被杀死的事实。在GcmListenerService中实现此类流程的正确方法是什么(在onMessageReceived中下载图像,然后在完成后发布通知)?

1 个答案:

答案 0 :(得分:0)

很难提供明确而完整的答案。毕加索的工作方式,也可能取决于接收设备的互联网连接,仍然有可能导致该过程被杀死。

我会在您的情况下做的是在客户端应用中使用默认图像以用于Notification,如果在特定时间内已经过去且图像仍未下载完全,只是为了确保显示Notification

对此过程非常感兴趣。祝好运。干杯! :d