2017-02-16 53 views
0

你好老乡程序员,无法从第二类重新加载上ActivityResult YouTube视频

我遇到对我的Android应用程序的一些问题,我目前 工作。为此,我只需要提及我有两个 活动(一个称为MainActivity.class,另一个称为FilterActivity.class)。

我的MainActiviy班的目的是显示一部电影(流派, 年,评分等)+特定视频的预告片。

在OnCreate方法MainActiviy,即时通讯初始化 YouTubePlayerView(因为我想一个随机电影尽快 弹出你打开应用程序)。

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

我从MainActivity这样打开FilterActivity:

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

在我FilterActivity IM从新 创建的影片发送的信息是这样的:

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以 重新加载具有特定网址的视频。旧视频仍在, 和可播放。我已经检查过,并且确实从FilterActivity的 获得了一个新的URL。

我来这个问题的唯一方法是基本上重新加载 的活动,然后(因为即时通讯创建一个随机电影在我的 OnCreate方法),标准不匹配。

任何建议,将不胜感激!

真诚

回答

0

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