【问题标题】:Pass Youtube Video Id Through Intent通过 Intent 传递 Youtube 视频 ID
【发布时间】:2017-04-19 08:57:02
【问题描述】:

假设我在列表视图中有一个对象,其中一个 YouTube videoId 作为参数之一。我知道如何使用 OnItemClickListener 以及如何通过意图传递额外内容。当我到达接收活动时,我必须在 onCreate 方法中调用 intent.getStringExtra("key") 。当我调用 cueVideo(videoId) 方法时,我需要在另一个方法 onInitializationSuccess 中检索到的 videoId。你能否解释一下我要做什么以及为什么这样我才能理解自己的成长。

public class PlayVideo extends YouTubeBaseActivity
    implements YouTubePlayer.OnInitializedListener{


private String GOOGLE_API_KEY = "AIzaSyCKcPfcvaFtN_izxXg7lzEcKVdF0A-7y1Q";
String VIDEO_ID = "ZHAe-SaplCw";


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_play_video);

    YouTubePlayerView playerView = (YouTubePlayerView) findViewById(R.id.player_view);
    playerView.initialize(GOOGLE_API_KEY, this);

    //Get videoId from current ListView Object
    Intent getVideoId = getIntent();
    String videoId = getVideoId.getStringExtra("videoIdExtra");

}

@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean wasRestored) {
    Toast.makeText(this, "Video Playing", Toast.LENGTH_SHORT).show();
    youTubePlayer.setPlayerStateChangeListener(playerStateChangeListener);
    youTubePlayer.setPlaybackEventListener(playbackEventListener);

    if(!wasRestored){
        youTubePlayer.cueVideo(VIDEO_ID);
    }
}

private YouTubePlayer.PlaybackEventListener playbackEventListener = new YouTubePlayer.PlaybackEventListener() {
    @Override
    public void onPlaying() {

    }

    @Override
    public void onPaused() {

    }

    @Override
    public void onStopped() {

    }

    @Override
    public void onBuffering(boolean b) {

    }

    @Override
    public void onSeekTo(int i) {

    }
};

YouTubePlayer.PlayerStateChangeListener playerStateChangeListener = new YouTubePlayer.PlayerStateChangeListener() {
    @Override
    public void onLoading() {

    }

    @Override
    public void onLoaded(String s) {

    }

    @Override
    public void onAdStarted() {

    }

    @Override
    public void onVideoStarted() {

    }

    @Override
    public void onVideoEnded() {

    }

    @Override
    public void onError(YouTubePlayer.ErrorReason errorReason) {

    }
};

@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
    Toast.makeText(this, "Play Failed", Toast.LENGTH_SHORT).show();
}


}

【问题讨论】:

  • 你已经有getVideoId.getStringExtra,请问有什么问题?
  • 脑洞大开,我才发现我可以做一个全局变量,在onCreate方法中初始化,然后在onInitializationSuccess方法中调用。但这就是我的问题所在。
  • 不用担心。如果您愿意,请随时接受我的回答

标签: java android android-intent youtube-api


【解决方案1】:

我一直在使用什么,它工作正常。

public class VideoPlayerActivity extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener {
private static final int RECOVERY_REQUEST = 1;
private YouTubePlayerView youTubeView;
private MyPlayerStateChangeListener playerStateChangeListener;
private MyPlaybackEventListener playbackEventListener;
private YouTubePlayer player;
private String videoKey;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_video_player);

    youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_view);
    youTubeView.initialize(Constants.YOUTUBE_API_KEY, this);
    playerStateChangeListener = new MyPlayerStateChangeListener();
    playbackEventListener = new MyPlaybackEventListener();

    Bundle bundle = getIntent().getExtras();
    videoKey = bundle.getString(Constants.YOUTUBE_VIDEO_KEY, null);

}

@Override
protected void onResume() {
    super.onResume();
}

@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) {
    this.player = player;
    player.setPlayerStateChangeListener(playerStateChangeListener);
    player.setPlaybackEventListener(playbackEventListener);
    if (!wasRestored) {
        player.cueVideo(Strings.isNullOrEmpty(videoKey) ? "fhWaJi1Hsfo" : videoKey);
        // Plays https://www.youtube.com/watch?v=fhWaJi1Hsfo
    }


}

@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult errorReason) {
    if (errorReason.isUserRecoverableError()) {
        errorReason.getErrorDialog(this, RECOVERY_REQUEST).show();
    } else {
        String error = String.format(getString(R.string.player_error), errorReason.toString());
        Toast.makeText(this, error, Toast.LENGTH_LONG).show();
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == RECOVERY_REQUEST) {
        // Retry initialization if user performed a recovery action
        getYouTubePlayerProvider().initialize(Constants.YOUTUBE_API_KEY, this);
    }
}

protected YouTubePlayer.Provider getYouTubePlayerProvider() {
    return youTubeView;
}

private final class MyPlaybackEventListener implements YouTubePlayer.PlaybackEventListener {

    @Override
    public void onPlaying() {
        // Called when playback starts, either due to user action or call to play().

    }

    @Override
    public void onPaused() {
        // Called when playback is paused, either due to user action or call to pause().

    }

    @Override
    public void onStopped() {
        // Called when playback stops for a reason other than being paused.

    }

    @Override
    public void onBuffering(boolean b) {
        // Called when buffering starts or ends.
    }

    @Override
    public void onSeekTo(int i) {
        // Called when a jump in playback position occurs, either
        // due to user scrubbing or call to seekRelativeMillis() or seekToMillis()
    }
}

private final class MyPlayerStateChangeListener implements YouTubePlayer.PlayerStateChangeListener {

    @Override
    public void onLoading() {
        // Called when the player is loading a video
        // At this point, it's not ready to accept commands affecting playback such as play() or pause()
    }

    @Override
    public void onLoaded(String s) {
        // Called when a video is done loading.
        // Playback methods such as play(), pause() or seekToMillis(int) may be called after this callback.
        player.play();
    }

    @Override
    public void onAdStarted() {
        // Called when playback of an advertisement starts.
    }

    @Override
    public void onVideoStarted() {
        // Called when playback of the video starts.
    }

    @Override
    public void onVideoEnded() {
        // Called when the video reaches its end.
    }

    @Override
    public void onError(YouTubePlayer.ErrorReason errorReason) {
        // Called when an error occurs.
    }
}
}

调用这个

Intent intent = new Intent(mContext, VideoPlayerActivity.class); intent.putExtra(Constants.YOUTUBE_VIDEO_KEY, youtubeKey); mContext.startActivity(intent);

也在 Constants.java 文件中

public static final String YOUTUBE_VIDEO_KEY = "you_tube_video_key"; public static final String YOUTUBE_API_KEY = "YOUR_API_KEY"; 希望对你有所帮助

【讨论】:

    【解决方案2】:

    要么声明一个成员变量,要么在其他方法中调用getIntent 并在那里获取ID。

    你能解释一下[...]为什么

    因为你想使用onCreate之外的值

    【讨论】:

      猜你喜欢
      • 2019-02-28
      • 2013-08-23
      • 1970-01-01
      • 2010-10-21
      • 2014-09-27
      • 1970-01-01
      • 2012-08-19
      • 2020-06-29
      • 2015-10-22
      相关资源
      最近更新 更多