【问题标题】:Use Youtube thumbnails in a RecyclerView在 RecyclerView 中使用 Youtube 缩略图
【发布时间】:2017-11-29 11:15:52
【问题描述】:

我正在尝试在 RecyclerView 中加载 Youtube 视频缩略图。调用 initialize() 方法时出现此错误。

java.lang.IllegalArgumentException: Service Intent must be explicit:              Intent { act=com.google.android.youtube.api.service.START }

这是我的 recyclerView 适配器:

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {
private Context mContext;
private List<Song> songsList;

public DataAdapter(Context mContext, List<Song> songsList) {
    this.mContext = mContext;
    this.songsList = songsList;
}

@Override
public int getItemCount() {
    return songsList.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {
    public TextView song_title, song_author;
    YouTubeThumbnailView youTubeThumbnailView;

    public ViewHolder(View view) {
        super(view);
        song_title = (TextView) view.findViewById(R.id.song_title);
        song_author = (TextView) view.findViewById(R.id.song_author);

        youTubeThumbnailView = (YouTubeThumbnailView) view.findViewById(R.id.youtube_thumbnail);
    }
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.card_row, parent, false);

    return new ViewHolder(itemView);
}

@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
    final Song song = songsList.get(position);
    holder.song_title.setText(song.getTitle());
    holder.song_author.setText(song.getAuthor());

    holder.youTubeThumbnailView.initialize(YOUTUBE_API_KEY, new YouTubeThumbnailView.OnInitializedListener() {
        @Override
        public void onInitializationSuccess(YouTubeThumbnailView youTubeThumbnailView, final YouTubeThumbnailLoader youTubeThumbnailLoader) {
            youTubeThumbnailLoader.setVideo(videoID);
            youTubeThumbnailLoader.setOnThumbnailLoadedListener(new YouTubeThumbnailLoader.OnThumbnailLoadedListener() {
                @Override
                public void onThumbnailLoaded(YouTubeThumbnailView youTubeThumbnailView, String s) {

                }

                @Override
                public void onThumbnailError(YouTubeThumbnailView youTubeThumbnailView, YouTubeThumbnailLoader.ErrorReason errorReason) {

                }
            });
        }

        @Override
        public void onInitializationFailure(YouTubeThumbnailView youTubeThumbnailView, YouTubeInitializationResult youTubeInitializationResult) {

        }
    });
}

在 MainActivity 中,我这样调用 DataAdapter:

mAdapter = new DataAdapter(MainActivity.this, songs);
                mRecyclerView.setAdapter(mAdapter);

【问题讨论】:

    标签: java android thumbnails android-youtube-api


    【解决方案1】:

    您必须使用以下网址下载特定视频的缩略图 http://img.youtube.com/vi/VIDEO_ID/default.jpg 将 VIDEO_ID 替换为 YouTube 的实际视频 ID。

    例如,您的 youtube 视频 url 是 https://www.youtube.com/watch?v=47S-Wn4EYdU,那么缩略图图像 URL 将是 http://img.youtube.com/vi/47S-Wn4EYdU/default.jpg,您必须下载此图像并将其设置为 holder.youTubeThumbnailView

    示例

    Adapter.java

    String YOUTUBE_URL = "https://www.youtube.com/watch?v=47S-Wn4EYdU";
        String[] strUrlText = YOUTUBE_URL.split("=");
                        String strURL = "http://img.youtube.com/vi/"+strUrlText[1]+"/default.jpg";
    
    
                        Images_Download imgs_Download = new Images_Download(context, imageView);
                        imgs_Download.execute(strURL);
    
                        imageView.setOnClickListener(new OnClickListener(){
    
                            @Override
                            public void onClick(View v) {
                                // TODO Auto-generated method stub
                                Intent in = new Intent(context, Youtube_Player_Activity.class);
                                in.putExtra("URL", YOUTUBE_URL);
                                context.startActivity(in);
                            }
                        });
    

    Youtube_Player_Activity.java

    public class Youtube_Player_Activity extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener {
    
        String url = "";
        @Override
        protected void onCreate(Bundle arg0) {
            // TODO Auto-generated method stub
            super.onCreate(arg0);
            setContentView(R.layout.youtube_player_activity);
    
            Bundle bundle = getIntent().getExtras();
            if(bundle != null)
            {           
                url = bundle.getString("URL");
            }
    
            YouTubePlayerView youTubeView = (YouTubePlayerView) findViewById(R.id.videoView1);
            youTubeView.initialize(SecurityInfo.DEVELOPER_KEY, this);
        }
    .....
    }
    

    【讨论】:

    • 我该怎么做呢?进入initialize()方法前应用崩溃
    • 不要在 Adapter 类中初始化它,在适配器中只在 imageView 中显示缩略图图像,并且 imageView 的 onClick 打开新活动并在那里初始化。
    • 我将使用 YoutubeStandalonePlayer。我的想法是在 Adapter 类的 OnBindViewHolder 中添加一个播放按钮和 createvideointent。像这样: holder.play_video.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = YouTubeStandalonePlayer.createVideoIntent((Activity)mContext, ApiKey.YOUTUBE_API_KEY, song.getYoutubeId(), 0, true, false); mContext.startActivity(intent); } });
    • 这取决于您的需要,哪一个最适合您,我刚刚建议您这样做。你可以使用任何一个。
    猜你喜欢
    • 2016-03-26
    • 2018-10-15
    • 2015-08-10
    • 2015-11-30
    • 2016-04-18
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多