旋转屏幕或隐藏播放器时 Android YouTube API 视频暂停

Posted

技术标签:

【中文标题】旋转屏幕或隐藏播放器时 Android YouTube API 视频暂停【英文标题】:Android YouTube API video pause when rotate screen or hide player 【发布时间】:2013-12-21 09:39:34 【问题描述】:

我正在使用适用于 android 的 YouTube API。视频正在正常播放,但是当我转动屏幕时,播放器停止播放视频,并且从头开始播放,就好像它没有播放一样。滚动屏幕并隐藏播放器时也会发生同样的情况。我已经研究了很多,并且还测试了一些我发现但没有任何效果的东西 =(

这是我宣布班级的方式:

public class PlayerTest extends YouTubeBaseActivity implements
    YouTubePlayer.OnInitializedListener 

这是我放入 onCreate() 的内容:

 YouTubePlayerView youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_view);
    youTubeView.initialize(DEVELOPER_KEY, this);

这是我实现的方法:

@Override
public void onInitializationFailure(Provider provider,
        YouTubeInitializationResult error) 
    Toast.makeText(this, "Error :( " + error.toString(), Toast.LENGTH_LONG)
            .show();


@Override
public void onInitializationSuccess(Provider provider,
        YouTubePlayer player, boolean wasRestored) 
    player.cueVideo(video);

问题:

我希望视频在滚动或翻转屏幕时继续播放。这可能吗? 我正在实施正确的方式?如果没有,最好的方法是什么?

提前感谢您的帮助!

【问题讨论】:

正如 sqrfv 指出的那样,当设备方向发生变化时,Android Activity 会被销毁并重新创建。我建议你使用getCurrentTimeMillis()方法找到当前播放位置(可能在ActivityonPause()方法中)并保存,当Activity重新创建时,使用seekToMillis()方法重新开始播放最后一个位置。 【参考方案1】:

当您翻转屏幕时,正在播放视频的 Activity 会被销毁,并会创建一个新的 Activity 并重置所有内容。它是一个功能,而不是一个错误。 :)

有几种方法可以解决这个问题;您可能需要保存一些状态,然后在创建任何新活动时检查任何保存的数据、管理数据等。查看:Keeping data view/layout in Android after screen rotate/activity destroyed。

【讨论】:

感谢您的回答。正如我对@Squonk 所说,我曾想过做这样的事情,但我不知道这个功能。我会尝试做你说的事情。这种旋转屏幕的情况没关系,我知道这是一个功能。但是在滚动屏幕并隐藏播放器的情况下,为什么视频也会停止?为什么当屏幕处于横向时,视频会立即播放并暂停? 对于滚动问题,我们需要更多信息,活动显然不会在滚动事件中被破坏。 我注意到一件事:当我慢慢滚动屏幕并隐藏播放器然后返回查看播放器时,播放器暂停而不是停止,只是暂停。但是如果我快速滚动并返回播放器会继续播放。它所暗示的是,似乎活动知道组件是否正在显示,如果他没有显示,它就会被破坏。如果滚动屏幕以查看组件,则活动会再次创建它。但如果是这样,播放器不是暂停而是停止。你同意吗? 我非常怀疑如果视图移出屏幕,活动会在滚动事件中被破坏。您可以将一些日志记录到活动的 onCreate 方法中,以准确查看它何时被调用。如果视频不再在屏幕上,YoutubeAPI 可能足够聪明,可以暂停或停止观看,但如果是这种情况,STOP 命令会将播放器重置为开始,而 PAUSE 命令不会。 是的,我在这里测试过。该组件没有被破坏,是 youtube API,它告诉播放器在播放器离开屏幕时暂停它,视频仅暂停,不返回开始。我做了一个测试,我改变了我的 xml 布局,让播放器固定在屏幕上并滚动到其余的内容,现在他不再暂停。这是另一种选择 =)【参考方案2】:

有一种方法可以让视频在设备旋转期间无任何停顿地播放。查看 YouTubeStandalonePlayer createVideoIntent() API 并将 'lightboxMode' 参数设置为 true。

如果设置为 true,它会在当前 Activity 上方的对话框视图中播放视频,并且不会在设备旋转期间暂停。

【讨论】:

【参考方案3】:
<activity 
android:label="YoursActivityName" 
android:configChanges="keyboardHidden|orientation|screenSize"
android:name="com.example.naren.YoursActivityName" /> 

将其添加到您的清单文件中。

【讨论】:

【参考方案4】:

对我来说诀窍是添加:

android:configChanges="keyboardHidden|orientation|screenSize"

到您的 android 清单。

干杯..

【讨论】:

简单解决问题 如果我使用你的解决方案,那么当我旋转屏幕时,它会继续使用纵向布局 xml 文件,而不是切换到横向布局文件【参考方案5】:

添加player.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_CUSTOM_LAYOUT)


    override fun onInitializationSuccess(provider: YouTubePlayer.Provider, player: YouTubePlayer, wasRestored: Boolean) 
        player.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_CUSTOM_LAYOUT)
        if (!wasRestored) 
            player.loadVideo(videoId)
        
    

文档 https://developers.google.com/youtube/android/player/reference/com/google/android/youtube/player/YouTubePlayer#FULLSCREEN_FLAG_CUSTOM_LAYOUT

avoiding the rebuffering that occurs in the default fullscreen behavior

【讨论】:

【参考方案6】:
<activity android:name=".theActivityNameyouWantToApply" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"></activity>

只需在您的 Manifest 部分中编写此代码(记得更改名称),它将完美运行!!! 谢谢

【讨论】:

这类似于 Narendra 之前的回答。请考虑建议对该答案进行修改,并说明您的建议更好的原因。

以上是关于旋转屏幕或隐藏播放器时 Android YouTube API 视频暂停的主要内容,如果未能解决你的问题,请参考以下文章

Android 从头搭建视频播放器——屏幕旋转处理

Android 从头搭建视频播放器——屏幕旋转处理

Android 设定横屏,禁止屏幕旋转,Activity重置 [更新视频播放器相关]

工具栏没有隐藏在 android 活动中

Android 片段不保存状态,在旋转/屏幕锁定/返回时崩溃

在android中自动旋转全屏视频