Android活动在onActivityResult之后旋转

时间:2016-10-24 08:12:48

标签: android android-activity rotation screen-orientation

我有一个Activity,用于记录Activity前置摄像头的视频。通过以下代码将方向锁定在AndroidManifest.xml文件中的纵向:

<activity
            android:name=".activity.SomeVideoActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="Video Activity"
            android:screenOrientation="portrait" />

如果用户第一次进入屏幕,这样可以正常工作。但是,在离开此活动并返回此活动后,显然可以重新启用横向模式。

我设法通过以下代码块强制定位来挽救这种情况:

@Override
 protected void onResume() {
   super.onResume();
   this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

所以我很好奇为什么这只发生在这一项活动上。我已经检查了onActivityResult的其他活动,并且他们根本没有弄乱方向设置。

更新

实际上这个问题是通过使用this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);来解决的,因为我的唯一目的是将活动锁定为纵向并禁用横向旋转。我只想理解为什么在SomeVideoActivity中从另一个活动返回后重新启用轮换,即使它在AndroidManifest中被声明为纵向方向。

2 个答案:

答案 0 :(得分:0)

将清单添加到您的活动代码android:screenOrientation =&#34; portrait&#34;这会阻止您的活动被轮换。

答案 1 :(得分:0)

这篇文章有点旧,但我有同样的问题(或类似的)。如果设备处于横向模式,则在完成活动时,屏幕将旋转为横向,然后返回纵向(在清单中强制执行)。

这是方案

  • 活动A为结果启动活动B.
  • 活动B完成其工作并设置结果。
  • 活动B结束。
  • 活动A收到结果并完成自己。

setRequestedOrientation 对我不起作用。我做的一个小改动是在收到结果后立即完成活动A,而是通过 postDelayed 调用延迟50ms。这很好。

new Handler().postDelayed(this::finish, 50);

还是有点奇怪。当你完成多个活动而它们之间没有间隔时,它似乎是一个Android错误。或者就在您使用Camera API时,可能是竞争条件。无论如何,我只是在这里张贴这个以防其他人面临同样的问题。