各位程序员大家好,

我遇到有关我的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

10-06 06:33