旋转屏幕或隐藏播放器时 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 指出的那样,当设备方向发生变化时,AndroidActivity
会被销毁并重新创建。我建议你使用getCurrentTimeMillis()
方法找到当前播放位置(可能在Activity
onPause()
方法中)并保存,当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 设定横屏,禁止屏幕旋转,Activity重置 [更新视频播放器相关]