gpt4 book ai didi

java - 无法从二等舱重新加载 ActivityResult 上的 YouTube 视频

转载 作者:太空宇宙 更新时间:2023-11-04 11:46:49 24 4
gpt4 key购买 nike

各位程序员大家好,

我的 Android 应用程序遇到一些问题,目前 正在努力。为此,我只需提及我有两个 Activity (一个称为 MainActivity.class,第二个称为 FilterActivity.class)。

我的 MainActiviy 类的目的是显示电影(流派、 年份、评级等)+特定视频的预告片。

在 MainActiviy 的 OnCreate 方法中,我正在初始化 YouTubePlayerView(因为我希望一旦 您打开应用程序)。

我的 FilterActivity 类的目的是选择一些特定的 电影的搜索标准。

我从 MainActivity 打开 FilterActivity,如下所示:

public void openFilter(){
Intent askIntent = new Intent(this, FilterActivity.class);
startActivityForResult(askIntent, 1); }

在我的 FilterActivity 中,我从新发送的信息 创建了这样的电影:

movieIntent.putExtra("url", a.getUrl());
movieIntent.putExtra("title", a.getTitle());
movieIntent.putExtra("rating", (String.valueOf(a.getRating())));
movieIntent.putExtra("plot", a.getDesc());
movieIntent.putExtra("year", (String.valueOf(a.getYear())));
movieIntent.putExtra("genre", a.getGenres());
setResult(RESULT_OK, movieIntent);
finish();

这就是我从 MainActivity 获取数据的方式:

protected void onActivityResult(int requestCode, int resultCode, final Intent data){
if(resultCode == RESULT_OK){
titleView.setText(data.getStringExtra("title"));
ratingView.setText(data.getStringExtra("rating"));
plotView.setText(data.getStringExtra("plot"));
yearView.setText(data.getStringExtra("year"));
genreView.setText(data.getStringExtra("genre"));
url = data.getStringExtra("url"); }

这基本上就是我需要展示的内容。 (顺便说一句,这都是作品): 我正在获取一部新创建的电影并且符合标准。

但是,在 OnActivityResult 中,我无法将 YoutubePlayerView 获取到 使用特定 URL 重新加载视频。旧视频还在 并且可玩。我已经检查过,确实从以下位置获得了新的 URL FilterActivity。

我解决这个问题的唯一方法就是重新加载 Activity ,然后(因为我在我的 OnCreate 方法),条件不匹配。

如有任何建议,我们将不胜感激!

真诚的

最佳答案

onActivityResult中,释放当前播放器并重新初始化YoutubePlayerView:

@Override
protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
if (resultCode == RESULT_OK) {
mVideoId = getVideoId(data.getStringExtra("url"));
mPlayer.release();
mYoutubeplayerView.initialize(mApiKey, this);
}
}

MainActivity 的完整示例是:

public class MainActivity extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener {

String mVideoId = "5xVh-7ywKpE";

String mApiKey = "YOUR_API_KEY";

YouTubePlayerView mYoutubeplayerView;

YouTubePlayer mPlayer;

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

mYoutubeplayerView = (YouTubePlayerView) findViewById(R.id.player);

mYoutubeplayerView.initialize(mApiKey, this);

Button button = (Button) findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openFilter();
}
});

}

@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider,
YouTubePlayer youTubePlayer, boolean b) {
mPlayer = youTubePlayer;
mPlayer.loadVideo(mVideoId);
}

@Override
public void onInitializationFailure(YouTubePlayer.Provider provider,
YouTubeInitializationResult youTubeInitializationResult) {
}


@Override
protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
if (resultCode == RESULT_OK) {
mVideoId = getVideoId(data.getStringExtra("url"));
mPlayer.release();
mYoutubeplayerView.initialize(mApiKey, this);
}
}

private String getVideoId(String url) {
String pattern = "(?<=watch\\?v=|/videos/|embed\\/)[^#\\&\\?]*";

Pattern compiledPattern = Pattern.compile(pattern);
Matcher matcher = compiledPattern.matcher(url);

if (matcher.find()) {
return matcher.group();
}
return "";
}

public void openFilter() {
Intent askIntent = new Intent(this, FilterActivity.class);
startActivityForResult(askIntent, 1);
}
}

请注意,我使用了 this发布从 url 路径提取 Youtube videoId

关于java - 无法从二等舱重新加载 ActivityResult 上的 YouTube 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42275033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com