Java Android google cast-我无法根据当前的播音视频设置通知和锁定屏幕上的图像缩略图

Java Android google cast-我无法根据当前的播音视频设置通知和锁定屏幕上的图像缩略图,java,android,google-chrome,Java,Android,Google Chrome,我只是想通过我的android sender应用程序显示当前在chrome cast上播放的缩略图。它在锁定全屏上显示,但现在在通知栏图像和锁定屏幕通知图像上显示,目前标题正在根据chrome cast上播放的currnet视频进行更新,但图像未加载 如果有人能解决我的问题那就太好了。 提前谢谢 我的android代码如下: if (!TextUtils.isEmpty(imageUrl)) { videoMetadata.

我只是想通过我的android sender应用程序显示当前在chrome cast上播放的缩略图。它在锁定全屏上显示,但现在在通知栏图像和锁定屏幕通知图像上显示,目前标题正在根据chrome cast上播放的currnet视频进行更新,但图像未加载

如果有人能解决我的问题那就太好了。 提前谢谢

我的android代码如下:

  if (!TextUtils.isEmpty(imageUrl)) {

                                videoMetadata.addImage(new WebImage(Uri.parse("https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/images/480x270/DesigningForGoogleCast2-480x270.jpg")));
                                videoMetadata.addImage(new WebImage(Uri.parse("https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/images/780x1200/DesigningForGoogleCast-887x1200.jpg")));
                            }
                            MediaInfo mediaInfo = null;

                            if (videoMetadata != null) {
                                mediaInfo = new MediaInfo.Builder(videoUrl)
                                        .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
                                        .setContentType("videos/mp4")
                                        .setMetadata(videoMetadata)
                                        .build();
                                arlMediaItem.add(new MediaQueueItem.Builder(mediaInfo).build());


                            }

            resultPendingResult = getRemoteMediaClient().queueLoad(getArrayFromList(arlMediaItem)
                    , starPos, MediaStatus.REPEAT_MODE_REPEAT_OFF, null);
            if (resultPendingResult != null)
                resultPendingResult.setResultCallback(new ResultCallback<RemoteMediaClient.MediaChannelResult>() {
                    @Override
                    public void onResult(@NonNull RemoteMediaClient.MediaChannelResult mediaChannelResult) {
                        switch (mediaChannelResult.getStatus().getStatusCode()) {
                            case RemoteMediaClient.STATUS_FAILED:
                                break;
                            case RemoteMediaClient.RESUME_STATE_PAUSE:
                                break;
                            case RemoteMediaClient.RESUME_STATE_PLAY:
                                break;
                        }
                    }
                });
if(!TextUtils.isEmpty(imageUrl)){
videoMetadata.addImage(新的WebImage(Uri.parse)(“https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/images/480x270/DesigningForGoogleCast2-480x270.jpg")));
videoMetadata.addImage(新的WebImage(Uri.parse)(“https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/images/780x1200/DesigningForGoogleCast-887x1200.jpg")));
}
MediaInfo MediaInfo=null;
if(videoMetadata!=null){
mediaInfo=新建mediaInfo.Builder(videoUrl)
.setStreamType(MediaInfo.STREAM\u类型\u缓冲)
.setContentType(“视频/mp4”)
.setMetadata(视频元数据)
.build();
arlMediaItem.add(新的MediaQueueItem.Builder(mediaInfo.build());
}
ResultPendingreult=getRemoteMediaClient().queueLoad(getArrayFromList(arlMediaItem)
,starPos,MediaStatus.REPEAT\u MODE\u REPEAT\u OFF,null);
if(resultPendingreult!=null)
resultPendingreult.setResultCallback(新的ResultCallback(){
@凌驾
public void onResult(@NonNull RemoteMediaClient.MediaChannelResult MediaChannelResult){
开关(mediaChannelResult.getStatus().getStatusCode()){
案例RemoteMediaClient.STATUS_失败:
打破
案例RemoteMediaClient.RESUME\u STATE\u PAUSE:
打破
案例RemoteMediaClient.RESUME\u STATE\u PLAY:
打破
}
}
});
CastOptionsProvider


公共类CastOptionsProvider实现OptionsProvider{
静态字符串标记=CastOptionsProvider.class.getSimpleName();
@凌驾
公共CastOptions getCastOptions(上下文){
NotificationOptions NotificationOptions=新建NotificationOptions.Builder()
.setActions(Arrays.asList(
MediaIntentReceiver.ACTION\u切换\u播放,
MediaIntentReceiver.ACTION_STOP_CASTING),新int[]{0,1})
.setTargetActivityClassName(AdvancedVideoPlayerActivity.class.getName())
.build();
CastMediaOptions mediaOptions=new CastMediaOptions.Builder()
.setImagePicker(新的ImagePickerImpl())
.setNotificationOptions(notificationOptions)
.setExpandedControllerActivityClassName(AdvancedVideoPlayerActivity.class.getName())
.build();
返回新的CastOptions.Builder()
.setReceiverApplicationId(CastMediaControlIntent.DEFAULT\u MEDIA\u RECEIVER\u APPLICATION\u ID)
.setCastMediaOptions(mediaOptions)
.build();
}
@凌驾
公共列表getAdditionalSessionProviders(上下文){
返回null;
}
私有静态类ImagePickerImpl扩展ImagePicker{
@凌驾
公共WebImage onPickImage(MediaMetadata、MediaMetadata、ImageHits、ImageHits){
如果((mediaMetadata==null)| |!mediaMetadata.hasImages()){
返回null;
}
List images=mediaMetadata.getImages();
如果(images.size()==1){
返回图像。获取(0);
}否则{
if(ImageHits.getType()==ImagePicker.IMAGE\u类型\u媒体\u路由\u控制器\u对话框\u背景){
返回图像。获取(0);
}否则{
返回图像。获取(1);
}
}
}
}
}

你好,安基特!我现在也有同样的问题。我尝试返回一个已知的硬编码图像,但没有成功。如果你解决了,请告诉我!我也会这么做的,安基特!我刚刚解决了将依赖项更新到最新版本的问题。如果你愿意,试试看!嗨malvarez,谢谢你的回复,你能告诉我你现在使用的是哪个依赖版本吗?我使用的是它的扩展插件exoplayer。我从2.8.1升级到2.9.0,它解决了我的问题。遗憾的是,它在cast对话框中有一个bug(边框太宽)
public class CastOptionsProvider implements OptionsProvider {
    static  String  TAG = CastOptionsProvider.class.getSimpleName();

    @Override
    public CastOptions getCastOptions(Context context) {

        NotificationOptions notificationOptions = new NotificationOptions.Builder()
                .setActions(Arrays.asList(
                        MediaIntentReceiver.ACTION_TOGGLE_PLAYBACK,
                        MediaIntentReceiver.ACTION_STOP_CASTING), new int[]{0,1})
                .setTargetActivityClassName(AdvancedVideoPlayerActivity.class.getName())
                .build();
        CastMediaOptions mediaOptions = new CastMediaOptions.Builder()
                .setImagePicker(new ImagePickerImpl())
                .setNotificationOptions(notificationOptions)
                .setExpandedControllerActivityClassName(AdvancedVideoPlayerActivity.class.getName())
                .build();

        return new CastOptions.Builder()
                .setReceiverApplicationId(CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID)
                .setCastMediaOptions(mediaOptions)
                .build();




    }
    @Override
    public List<SessionProvider> getAdditionalSessionProviders(Context context) {
        return null;
    }


    private static class ImagePickerImpl extends ImagePicker {

        @Override
        public WebImage onPickImage(MediaMetadata mediaMetadata, ImageHints imageHints) {
            if ((mediaMetadata == null) || !mediaMetadata.hasImages()) {
                return null;
            }
            List<WebImage> images = mediaMetadata.getImages();
            if (images.size() == 1) {
                return images.get(0);
            } else {
                if (imageHints.getType() == ImagePicker.IMAGE_TYPE_MEDIA_ROUTE_CONTROLLER_DIALOG_BACKGROUND) {

                    return images.get(0);
                } else {
                    return images.get(1);
                }
            }
        }
    }
}