Chromecast Sender v2.7.0锁屏图片

我们如何为运行v2.7.0chromecast sender应用程序显示锁屏艺术作品。 没有任何解决方案,我花了大约2天时间做了最好的部分。

v2.7.0库目前在VideoCastManager.java类中具有以下方法:

 private void setBitmapForLockScreen(MediaInfo video) { if (video == null || mMediaSessionCompat == null) { return; } Uri imgUrl = null; Bitmap bm = null; List images = video.getMetadata().getImages(); if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR2) { if (images.size() > 1) { imgUrl = images.get(1).getUrl(); } else if (images.size() == 1) { imgUrl = images.get(0).getUrl(); } else if (mContext != null) { // we don't have a url for image so get a placeholder image from resources bm = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.album_art_placeholder_large); } } else if (!images.isEmpty()) { imgUrl = images.get(0).getUrl(); } else { // we don't have a url for image so get a placeholder image from resources bm = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.album_art_placeholder); } if (bm != null) { MediaMetadataCompat currentMetadata = mMediaSessionCompat.getController().getMetadata(); MediaMetadataCompat.Builder newBuilder = currentMetadata == null ? new MediaMetadataCompat.Builder() : new MediaMetadataCompat.Builder(currentMetadata); mMediaSessionCompat.setMetadata(newBuilder .putBitmap(MediaMetadataCompat.METADATA_KEY_ART, bm) .build()); } else { if (mLockScreenFetchTask != null) { mLockScreenFetchTask.cancel(true); } mLockScreenFetchTask = new FetchBitmapTask() { @Override protected void onPostExecute(Bitmap bitmap) { if (mMediaSessionCompat != null) { MediaMetadataCompat currentMetadata = mMediaSessionCompat.getController() .getMetadata(); MediaMetadataCompat.Builder newBuilder = currentMetadata == null ? new MediaMetadataCompat.Builder() : new MediaMetadataCompat.Builder(currentMetadata); mMediaSessionCompat.setMetadata(newBuilder .putBitmap(MediaMetadataCompat.METADATA_KEY_ART, bitmap) .build()); } mLockScreenFetchTask = null; } }; mLockScreenFetchTask.execute(imgUrl); } } 

我尝试用我自己的自定义图像album_art_placeholder_large drawable,没有结果。 还尝试通过以下行添加位图:

 putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, bm) 

但没有任何作用。 我到底错过了什么? 需要使用哪些MediaMetadataCompat键来显示锁屏艺术品? 或者我正在寻找错误的地方开始?

我尝试了一些其他链接但无济于事:

锁定屏幕上的Android MediaMetadata图像已缩放

在MediaMetada GoogleCast中添加更多字段

截至目前,该在线文件非常差,并没有多大帮助。

谢谢!

编辑 :进一步调查,锁定设备后显示锁屏图像似乎需要15-20分钟。 不知道为什么。

编辑2 :setupMediaSession方法。

 private void setUpMediaSession(final MediaInfo info) { if (!isFeatureEnabled(CastConfiguration.FEATURE_LOCKSCREEN)) { return; } if (mMediaSessionCompat == null) { ComponentName mediaEventReceiver = new ComponentName(mContext, VideoIntentReceiver.class.getName()); mMediaSessionCompat = new MediaSessionCompat(mContext, "TAG", mediaEventReceiver, null); mMediaSessionCompat.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS); mMediaSessionCompat.setActive(true); mMediaSessionCompat.setCallback(new MediaSessionCompat.Callback() { @Override public boolean onMediaButtonEvent(Intent mediaButtonIntent) { KeyEvent keyEvent = mediaButtonIntent .getParcelableExtra(Intent.EXTRA_KEY_EVENT); if (keyEvent != null && (keyEvent.getKeyCode() == KeyEvent.KEYCODE_MEDIA_PAUSE || keyEvent.getKeyCode() == KeyEvent.KEYCODE_MEDIA_PLAY)) { toggle(); } return true; } @Override public void onPlay() { toggle(); } @Override public void onPause() { toggle(); } private void toggle() { try { togglePlayback(); } catch (CastException | TransientNetworkDisconnectionException | NoConnectionException e) { LOGE(TAG, "MediaSessionCompat.Callback(): Failed to toggle playback", e); } } }); } mAudioManager.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK); PendingIntent pi = getCastControllerPendingIntent(); if (pi != null) { mMediaSessionCompat.setSessionActivity(pi); } if (info == null) { mMediaSessionCompat.setPlaybackState(new PlaybackStateCompat.Builder() .setState(PlaybackStateCompat.STATE_NONE, 0, 1.0f).build()); } else { mMediaSessionCompat.setPlaybackState(new PlaybackStateCompat.Builder() .setState(PlaybackStateCompat.STATE_PLAYING, 0, 1.0f) .setActions(PlaybackStateCompat.ACTION_PLAY_PAUSE).build()); } // Update the media session's image updateLockScreenImage(info); // update the media session's metadata updateMediaSessionMetadata(); mMediaRouter.setMediaSessionCompat(mMediaSessionCompat); } 

在定义MediaInfo时,您是否定义了“更大”的专辑艺术? CCL假设你有一个较小的一个,设置为index = 0,它将用于通知和迷你控制器和媒体路由器控制器对话框以及一个较大的(MediaInfo中的第二个图像,index = 1)将用于锁屏和全屏遥控器。 如果有这些图像,CCL会自动使用它们。 作为测试,运行CastVideos-android(v2)并查看它是否适合您。