7

Sto utilizzando Glide per tutte le immagini di caricamento dal server, ma sto avendo risoluzione dei problemi cercando di impostarle in modo corretto per le notifiche e RemoteControlClientCompat (quella cosa interessante con le schermate di blocco). Sto sviluppando un lettore musicale, quindi ogni volta che una canzone viene cambiata, la copertina della canzone delle notifiche deve cambiare. Ho questo codice e funziona per la prima volta (anche se l'immagine viene caricata dall'URL o da drawable), ma non quando viene chiamata per la seconda volta. L'immagine non cambia! CustomNotification viene invocato quando viene modificata una song. E RegisterRemoteClient viene invocato all'avvio dell'attività.Come usare Glide in remoteViews?

Se questo non è il modo corretto per farlo, si prega di dire come.

public void CustomNotification() { 
    Log.d(TAG, "Set custom notification"); 

    simpleRemoteView = new RemoteViews(getApplicationContext().getPackageName(), R.layout.notification_custom); 
    expandedRemoteView = new RemoteViews(getApplicationContext().getPackageName(), R.layout.notification_big); 

    mNotification = new NotificationCompat.Builder(getApplicationContext()) 
      .setSmallIcon(R.mipmap.ic_main_logo) 
      .setTicker(mSongTitle + " - " + mSongAuthors) 
      .setContentTitle(mSongTitle).build(); 

    setRemoteListeners(simpleRemoteView); 
    setRemoteListeners(expandedRemoteView); 

    try { 
     //Check if playingSong has a cover url, if not set one from drawable 
     if(!playingSong.has("cover")){ 
      mDummyAlbumArt = BitmapFactory.decodeResource(getResources(),R.drawable.image_song_album); 
      mDummyAlbumArt2 = BitmapFactory.decodeResource(getResources(),R.drawable.image_song_album); 
      mDummyAlbumArt3 = BitmapFactory.decodeResource(getResources(),R.drawable.image_song_album); 
     }else { 
      Glide.with(MainActivity.context) 
        .load(API.imgUrl(playingSong.getString("cover_img"))) 
        .asBitmap() 
        .into(new SimpleTarget<Bitmap>(100, 100) { 
         @Override 
         public void onResourceReady(Bitmap bitmap, GlideAnimation anim) { 
          mDummyAlbumArt = bitmap; 
          mDummyAlbumArt2 = bitmap; 
          mDummyAlbumArt3 = bitmap; 
         } 
        }); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    mNotification.contentView = simpleRemoteView; 
    mNotification.contentView.setTextViewText(R.id.textSongName, mSongTitle); 
    mNotification.contentView.setTextViewText(R.id.textAlbumName, mSongAuthors); 
    mNotification.contentView.setImageViewBitmap(R.id.imageViewAlbumArt, mDummyAlbumArt); 

    if (currentVersionSupportBigNotification) { 
     mNotification.bigContentView = expandedRemoteView; 
     mNotification.bigContentView.setTextViewText(R.id.textSongName, mSongTitle); 
     mNotification.bigContentView.setTextViewText(R.id.textAlbumName, mSongAuthors); 
     mNotification.bigContentView.setImageViewBitmap(R.id.imageViewAlbumArt, mDummyAlbumArt2); 
    } 

    if (mPlayer != null) { 
     if (!mPlayer.isPlaying()) { 
      mNotification.contentView.setImageViewResource(R.id.btnPlayPause, R.mipmap.play); 
      if (currentVersionSupportBigNotification) { 
       mNotification.bigContentView.setImageViewResource(R.id.btnPlayPause, R.mipmap.play); 
      } 
     } else { 
      mNotification.contentView.setImageViewResource(R.id.btnPlayPause, R.mipmap.pause); 
      if (currentVersionSupportBigNotification) { 
       mNotification.bigContentView.setImageViewResource(R.id.btnPlayPause, R.mipmap.pause); 
      } 
     } 
    } 

    mNotification.flags |= Notification.FLAG_ONGOING_EVENT; 
    if(currentVersionSupportBigNotification) { //As priority_max only suported on API 16, the same as big notification 
     mNotification.priority = Notification.PRIORITY_MAX; 
    } 
    startForeground(NOTIFICATION_ID, mNotification); 

    //update remote controls 
    if (currentVersionSupportLockScreenControls) { 
     remoteControlClientCompat.editMetadata(true) 
       .putString(MediaMetadataRetriever.METADATA_KEY_TITLE, mSongTitle + " - " + mSongAuthors) 
       .putBitmap(RemoteControlClientCompat.MetadataEditorCompat.METADATA_KEY_ARTWORK, mDummyAlbumArt3) 
       .apply(); 
    } 
} 

public void setRemoteListeners(RemoteViews remoteViews){ 
    Log.d(TAG,"Setting remote listeners"); 
    PendingIntent piAppActivity = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), 
      PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent piPlayPause = PendingIntent.getService(this, 0, new Intent(MusicService.ACTION_TOGGLE_PLAYBACK), PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent piNext = PendingIntent.getService(this, 0, new Intent(MusicService.ACTION_SKIP), PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent piClose = PendingIntent.getService(this, 0, new Intent(MusicService.ACTION_STOP), PendingIntent.FLAG_UPDATE_CURRENT); 
    PendingIntent piPrevious = PendingIntent.getService(this, 0, new Intent(MusicService.ACTION_PREVIOUS), PendingIntent.FLAG_UPDATE_CURRENT); 

    remoteViews.setOnClickPendingIntent(R.id.linearLayoutNotification, piAppActivity); 
    remoteViews.setOnClickPendingIntent(R.id.btnPlayPause, piPlayPause); 
    remoteViews.setOnClickPendingIntent(R.id.btnNext, piNext); 
    remoteViews.setOnClickPendingIntent(R.id.btnDelete, piClose); 
    remoteViews.setOnClickPendingIntent(R.id.btnPrevious, piPrevious); 
} 

private void RegisterRemoteClient(){ 
    // Use the media button APIs (if available) to register ourselves for media button 
    // events 

    MediaButtonHelper.registerMediaButtonEventReceiverCompat(mAudioManager, mMediaButtonReceiverComponent); 
    // Use the remote control APIs (if available) to set the playback state 
    if (remoteControlClientCompat == null) { 
     Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON); 
     intent.setComponent(mMediaButtonReceiverComponent); 
     remoteControlClientCompat = new RemoteControlClientCompat(PendingIntent.getBroadcast(this /*context*/,0 /*requestCode, ignored*/, intent /*intent*/, 0 /*flags*/)); 
     RemoteControlHelper.registerRemoteControlClient(mAudioManager,remoteControlClientCompat); 
    } 

    remoteControlClientCompat.setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING); 
    remoteControlClientCompat.setTransportControlFlags(
      RemoteControlClient.FLAG_KEY_MEDIA_PAUSE | 
        RemoteControlClient.FLAG_KEY_MEDIA_PREVIOUS | 
        RemoteControlClient.FLAG_KEY_MEDIA_NEXT | 
        RemoteControlClient.FLAG_KEY_MEDIA_STOP); 
} 

risposta

9

è necessario impostare l'uso NotificationTarget classe per impostare l'immagine di notifica come obiettivo glide

NotificationTarget notificationTarget = new NotificationTarget( 
    context, 
    remoteView, 
    R.id.iv_album_art, 
    notification, 
    NOTIFICATION_ID); 

e quindi utilizzare tale obiettivo nel solito modo glide

Uri uri = ContentUris.withAppendedId(PlayerConstants.sArtworkUri, 
     mediaitem.getAlbumId()); 

    Glide.with(getApplicationContext()) 
    .load(uri) 
    .asBitmap() 
    .into(notificationTarget); 

Viene spiegato nella linea guida di Glide qui

https://futurestud.io/blog/glide-loading-images-into-notifications-and-appwidgets

Ti potrebbe piacere anche per animare le copertine degli album Change-qui descritto il suo: -

https://futurestud.io/blog/glide-custom-animations-with-animate

-3

questo ha funzionato per me:

Bitmap bitmap = Glide.with(mContext) 
       .load(YOUR_IMG_URL) 
       .asBitmap() 
       .into(Target.SIZE_ORIGINAL,Target.SIZE_ORIGINAL) 
       .get(); 
     remoteViews.setImageViewBitmap(R.id.widget_list_item_img,bitmap); 
+1

Ciò potrebbe bloccare il filo –

Problemi correlati