Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓:当我全屏观看youtube视频时,按下back键,活动结束_Android_Fullscreen_Android Youtube Api - Fatal编程技术网

Android 安卓:当我全屏观看youtube视频时,按下back键,活动结束

Android 安卓:当我全屏观看youtube视频时,按下back键,活动结束,android,fullscreen,android-youtube-api,Android,Fullscreen,Android Youtube Api,我已经阅读了YouTube视频全屏显示的方法是按下后退,但在我的活动中,它不是这样工作的,但我希望它是这样 我给你发代码: public class MainActivity extends YouTubeFailureRecoveryActivity { public static String prefix = "https://gdata.youtube.com/feeds/api/playlists/"; public static String sufix = "?v=

我已经阅读了YouTube视频全屏显示的方法是按下后退,但在我的
活动中,它不是这样工作的,但我希望它是这样

我给你发代码:

public class MainActivity extends YouTubeFailureRecoveryActivity {
    public static String prefix = "https://gdata.youtube.com/feeds/api/playlists/";
    public static String sufix = "?v=2&alt=jsonc";

    private String myPlayList = "PLZGKlf2ZwY7ua0C2oeUaXQKeLKNGy3mkh";

    private VideosListFragment videosFragment;

    // The next video to play
    private Video actualVideo;

    // This is the handler that receives the response when the YouTube read
    private Handler responseHandler;


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        videosFragment = (VideosListFragment) getFragmentManager().findFragmentById(R.id.videosListView);
        getUserYouTubeFeed();

    }

    @Override
    public void onInitializationSuccess(YouTubePlayer.Provider provider,
            YouTubePlayer player, boolean wasRestored) {
        if (!wasRestored) {
            player.loadVideo(actualVideo.getVideoId());
        }
    }

    @Override
    protected YouTubePlayer.Provider getYouTubePlayerProvider() {
        return (YouTubePlayerFragment) getFragmentManager().findFragmentById(
                R.id.youtube_fragment);
    }

    public void getUserYouTubeFeed() {
        responseHandler = new Handler() {
            public void handleMessage(Message msg) {
                populateListWithVideos(msg);
            };
        };
        // We start a new AsyncTask that does its work on its own thread
        // We pass in a handler that will be called when the task has finished
        LoadPlayListElements bgTask = new LoadPlayListElements(responseHandler);
        bgTask.execute(myPlayList);

    }

    /**
     * This method retrieves the Library of videos from the task and passes them
     * to our ListView
     * 
     * @param msg
     */
    private void populateListWithVideos(Message msg) {
        Library lib = (Library) msg.getData().get(
                LoadPlayListElements.LIBRARY);
        VideosAdapter videos = new VideosAdapter(this, lib.getVideos());
        videosFragment.setListAdapter(videos);
    }

    @Override
    protected void onStop() {
        // Make sure we null our handler when the activity has stopped
        responseHandler = null;
        super.onStop();
    }

    public void setVideo(Video _item, boolean _activate) {
        actualVideo = _item;
        if (_activate){
            YouTubePlayerFragment fragment = (YouTubePlayerFragment) getFragmentManager()
                    .findFragmentById(R.id.youtube_fragment);
            if (fragment != null && fragment.isInLayout()) {
                fragment.initialize(DeveloperKey.DEVELOPER_KEY, this);
            }
        }
    }
}
布局如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin" >

    <fragment
        android:id="@+id/videosListView"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:layout_marginTop="?android:attr/actionBarSize"
        class="com.vivoenmimundo.sc2hotsepicreplays.ui.phone.fragment.VideosListFragment" >
    </fragment>

    <fragment
      android:name="com.google.android.youtube.player.YouTubePlayerFragment"
      android:id="@+id/youtube_fragment"
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:layout_weight="2"
      android:layout_gravity="center_vertical"/>
</LinearLayout>


有什么想法吗?我试着不做任何太奇怪的事情,只是复制/粘贴YouTube的API示例。

您可以尝试检测按下后退按钮并自定义它的功能

// Sets functionality of the hard buttons on the device
@Override 
public boolean onKeyUp(int keyCode, KeyEvent event)
{
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // Custom define what you want to happen
    }
    return true;
}

如前所述,这是正确的行为-因为玩家在碎片中,我必须用以下方法抓住后退按钮:

@Override
public void onBackPressed() {
    if (fullScreen){
        videoPlayer.setFullscreen(false);
    } else{
        super.onBackPressed();
    }
}
并将我的“全屏”布尔值设置为:

@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider,
        YouTubePlayer player, boolean wasRestored) {
    if (!wasRestored) {
        showPlayer();
        videoPlayer = player;
        videoPlayer.setOnFullscreenListener(new OnFullscreenListener() {

            @Override
            public void onFullscreen(boolean _isFullScreen) {
                fullScreen = _isFullScreen;
            }
        });
        videoPlayer.loadVideo(actualVideo.getVideoId());
    }
}

谢谢大家

第1步:按照Nhano的回答16

第二步:在你的Menifest YoutubeActivity标签下面添加一行

android:configChanges=“方向|屏幕大小”


此解决方案对我有效。

按back键时,调用onStop或onDestory并销毁活动似乎是一种正确的行为。如何使用OnBackpress方法访问videoPlayer?我也尝试了同样的方法,但得到了这个NullPointerException:尝试在null对象引用上调用接口方法'void com.google.android.youtube.player.youtubeplyer.setFullscreen(布尔)'。但是在onInitializationSuccess方法内的字段变量中调用videoplayer对象这在片段中不起作用。As
onBackPressed
方法在片段中不可用。