7

サーバからのすべての画像を読み込むためにGlideを使用していますが、通知とRemoteControlClientCompat(ロック画面のクールなもの)に正しく設定するためのトラブルシューティングが必要です。私は音楽プレーヤーを開発しているので、曲が変更されるたびに通知から曲のカバーが変更される必要があります。私はこのコードを持っていて、それは最初に動作します(イメージはURLまたはドロワブルからロードされています)が、2度目に呼び出されたときは動作しません。イメージは変わらない! CustomNotificationは、曲が変更されたときに呼び出されます。 RegisterRemoteClientは、開始アクティビティで呼び出されます。glideをremoteViewsで使用するには?

これが正しい方法でない場合は、どうか教えてください。

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

答えて

9

あなたが滑空対象として

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

をご通知画像を設定するために使用して、NotificationTargetクラスを設定し、それを説明する

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

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

通常のグライドの方法でそのターゲットを使用する必要がありますグライドのガイドラインはこちら

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

ます。また、そのここで説明change-アルバムアートをアニメーション化したいかもしれません: -

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

-3

これが私の仕事:

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

これは、スレッドをブロックすることがあります –

関連する問題