各位程序员大家好,
我遇到有关我的Android应用程序的一些问题,目前
正在努力。为此,我只需要提到我有两个
活动(第一个称为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。
FilterActivity。
解决此问题的唯一方法是基本上重新加载
活动,然后(因为我在自己的位置创建了随机电影
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帖子从网址路径中提取Youtube videoId