- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在我的应用程序中,我有一个以横向模式播放 http 直播视频的 Activity 。
我的 AndroidManifest.xml:
<activity android:name=".MediaPlayerActivity"
android:label="@string/menu_player"
android:launchMode="singleInstance"
android:screenOrientation="landscape">
</activity>
我的 Activity 布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/black">
<VideoView android:id="@+id/myVideoView"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:layout_gravity="center_horizontal"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"/>
</LinearLayout>
问题是每次我关闭此 Activity (通过单击后退按钮)时,它总是在关闭之前旋转到纵向模式(时间很快但您可以在返回上一个 Activity 之前实际看到效果)。我该如何解决这个烦人的问题?
更新更多信息
这种烦人的行为只发生在如果之前的 Activity 是纵向模式,如果之前的 Activity 是横向的,那就没问题了。在我看来,当使用不同的 screenOrientation 设置淡入/淡出 Activity 时,这似乎与 Android 框架有关。
更新原因
在深入阅读了 Google 的 API 之后,我想我找到了导致这种恼人行为的原因,查看 here :
Unless you specify otherwise, a configuration change (such as a change in screen orientation, language, input devices, etc) will cause your current activity to be destroyed, going through the normal activity lifecycle process of onPause(), onStop(), and onDestroy() as appropriate. If the activity had been in the foreground or visible to the user, once onDestroy() is called in that instance then a new instance of the activity will be created, with whatever savedInstanceState the previous instance had generated from onSaveInstanceState(Bundle).
那么当点击后退按钮时在幕后发生了什么:currnet VideoView Activity(横向)被销毁,一个新的 VideoView Activity(纵向)被创建,因为 screenOrientation 配置已经改变,并且立即被销毁(你可以在这里看到效果在屏幕上),显示堆栈中的最后一个 Activity 。这也解释了为什么如果最后一个 Activity 具有相同的 screenOrientation 设置,这种烦人的行为就会消失。
由于配置更改,我仍在尝试找出如何绕过此 Activity 重新创建。正如 API 中所述,重写onConfigurationChanged(Configuration),但是,由于我在 xml 中显式定义了 screenOrientation,因此不会调用 onConfigurationChanged(),之前已经讨论过很多类似的 SO,比如 this one .
请提供正确方向的答案。
谢谢,
对
最佳答案
尝试在 Activity 的 onPause()< 中添加对 VideoView 的
、suspend()
、resume()
和 stopPlayback()
的调用onResume()
和 onDestroy()
方法:
@Override
protected void onResume() {
mVideoView.resume();
super.onResume();
}
@Override
protected void onPause() {
mVideoView.suspend();
super.onPause();
}
@Override
protected void onDestroy() {
mVideoView.stopPlayback();
super.onDestroy();
}
VideoView 类的实现因设备而异(类本身是 very sparsely documented ),但 AOSP 的 Gallery3D 代码确实在其 MovieView activity lifecycle methods 中调用了上述方法。 ,所以希望大多数设备至少应该让自己在这种情况下看起来不错。
如果它看起来仍然很糟糕,您可能想在您的 Activity 中覆盖 onBackPressed()
以隐藏 VideoView 或一些类似的 hack 来隐藏烦人的行为:)
关于android - 如何正确关闭 Landscape VideoView Activity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7909639/
我的问题: 对于某些要求,我的 Activity 需要两种不同的 xml 布局: 一个用于横向模式。 还有一个用于Landscape-reverse 模式(横向颠倒)。 不幸的是,Android 不允
如何检测手机的 4 个面中的哪一个面朝上。 我可以检测纵向/横向模式,但如何区分 landscape-turned-on-left-side 和 landscape-turned-on-right-s
我现在搜索了一天,但没有找到合适的解决方案。我的应用程序由一个 Tab Bar Controller 和一个 Navigation Controllers 组成。我希望所有屏幕都只有纵向屏幕,但只有一
需要说明的是,我的问题不是读取左右横向的航向值。它工作正常 我正在使用位置管理器并减去 90° 以读取横向右侧的航向值和横向左侧的 270°,默认情况下设备始终被视为纵向模式,这就是我们必须进行此调整
这个问题与here构成的问题非常相似。 我的问题是我有一张 map ,像这样: 该 map 是使用2D Perlin噪波制作的,然后遍历创建的高度图,根据相应元素的高度或坡度为地形中的每个元素分配类型
我已经编写了自己的 Perlin Noise 实现,并且运行良好。我可以通过改变频率来“放大”和缩小,但是当我放大时,噪音变得越来越平滑。 假设我有一个显示大陆的景观。我想放大到一个城市大小的区域(或
我正在探索线性遗传规划的世界,但我发现自己陷入了这个问题。在我看来,即使是最简单的问题的错误情况也非常不顺利。特别是,错误景观似乎总是包含这些巨大的恒定错误差距(解决方案的适应性仅为零的差距)。这使进
我已经正确配置了应用程序,它只能横向运行。当我在 Emulator (v.24.4.0.0) 上运行它时,Android 以纵向模式启动。应用程序以横向运行,但图片旋转并且窗口标题被隐藏,因为在纵向模
我有这样写的媒体查询: @media only screen and (max-device-width: 600px) and (orientation: portrait) { .img-resp
我有一个计算子网表的应用程序。 但如果我改变方向,TextViews 就是空的。 我为此寻找一个听众。欢迎替代方案:D在监听器中,我会重新计算表格。 最佳答案 在您的 Activity 中使用以下代码
我正在使用 iTextSharp 生成大型文档。在本文档中,我想要一些横向的特定页面。其余的都是肖像。有谁知道我该怎么做?开始一个新文档不是一种选择。 谢谢! 最佳答案 您可以设置文档大小,它会影响下
当 Activity 处于横向模式时如何滚动浏览 Activity, 场景:我的 textview 有大约一千个单词和几个按钮,当 Activity 处于横向模式时如何应用滚动 最佳答案 用 Scro
我试图为我的应用程序强制使用“横向”模式,因为我的应用程序绝对不是为“纵向”模式设计的。我怎样才能做到这一点? 最佳答案 现在可以使用 HTML5 webapp list 。见下文。 原答案: 您无法
我不明白为什么 iPhone“横向”上的 font-size 属性看起来比纵向或桌面浏览器大... 我有 body font-size: 100% 对于图片内的文字 17px 肖像 景观 我保证在横向
我试图为我的应用程序强制使用“横向”模式,因为我的应用程序绝对不是为“纵向”模式设计的。我怎样才能做到这一点? 最佳答案 现在可以使用 HTML5 webapp list 。见下文。 原答案: 您无法
直到最近我还在使用 Eclipse,在 Eclipse 中我只是创建了一个文件夹/res/layout-landscape 并在其中放置了替代的横向布局。 但是,似乎在 Android Studio
我想使用横向打印。在 Firefox 中,它总是以纵向打印吗?其他浏览器使用 landscape.@media print{ @page { 尺寸:景观; margin :0; } 最佳答案 我已经看
在 iOS6 上,我有一种方法可以让我的导航式应用程序中的一个 View Controller 在我按下时自动旋转到横向。 (基本上呈现一个伪造的 View Controller 并在 viewWil
我正在开发 iPad 应用程序,在 modalView Controller 中显示一些 View 。在景观中,当我单击 UITextField 进行一些输入时,模态视图 Controller 会上升
我想在默认情况下以横向左侧启动我的应用程序。但我想保留将其转为横向的可能性。有办法吗? (因为应用程序现在默认以横向方式启动) 最佳答案 如果您的应用仅适用于 iOS 8+,只需将 UIInterfa
我是一名优秀的程序员,十分优秀!