你好,程序员,
我正在遇到有关我的Android应用的一些问题,我目前 继续工作。为此,我只需要提及我有两个 活动(一个称为MainAttivity.Class,第二个称为 filterActivity.class)。
我的Mainactiviy班级的目的是展示电影(流派, 一年,评分等) specifik视频的预告片。
在Mainactiviy的on创作方法中,即将初始化 YouTubePlayerView(因为我希望随机弹出一部随机的电影 您打开应用程序)。
我的过滤性类别的目的是选择一些Specfik 搜索电影的标准。
我正在从这样的主动脉中打开过滤性:
public void openFilter(){
Intent askIntent = new Intent(this, FilterActivity.class);
startActivityForResult(askIntent, 1); }
在我的过滤性中,我从新的 像这样创建的电影:
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 过滤性。
我解决这个问题的唯一方法是基本上重新加载 活动,然后(因为我在我的 ongreate方法),标准不匹配。
任何建议都将不胜感激!
真诚
在 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);
}
}
请注意,我已经使用这篇文章从URL路径中提取YouTube videoid