我的主要活动有一些代码,这些代码进行了一些不应该被中断的数据库更改。我在另一个线程中做繁重的工作,并使用一个我设置为不可取消的进度对话框。然而,我注意到,如果我旋转我的手机,它会重新启动活动,这对正在运行的进程非常不利,我得到了Force Close。
我想要做的是通过编程禁用屏幕方向更改,直到我的过程完成,此时启用方向更改。
发布于 2010-09-01 08:02:58
正如克里斯在他的self-answer中所解释的那样,调用
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
然后
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
真的很有魅力。在真实的设备上!
在模拟器上测试时不要认为它坏了,ctrl+F11快捷键总是改变屏幕方向,而不是模拟传感器的移动。
编辑:这不是最好的答案。正如评论中所解释的,这种方法存在问题。The real answer is here。
发布于 2010-11-06 07:37:22
其他答案对我来说都不是完美的,但我发现它做到了这一点。
将方向锁定为当前...
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
当应该再次允许更改方向时,请重新设置为默认值...
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
发布于 2013-05-17 08:23:34
这是一个更完整和最新的解决方案,适用于API 8+,适用于反转纵向和横向,并适用于“自然”方向为横向的银河标签(调用activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
解锁方向):
@SuppressWarnings("deprecation")
@SuppressLint("NewApi")
public static void lockActivityOrientation(Activity activity) {
Display display = activity.getWindowManager().getDefaultDisplay();
int rotation = display.getRotation();
int height;
int width;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2) {
height = display.getHeight();
width = display.getWidth();
} else {
Point size = new Point();
display.getSize(size);
height = size.y;
width = size.x;
}
switch (rotation) {
case Surface.ROTATION_90:
if (width > height)
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
else
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
break;
case Surface.ROTATION_180:
if (height > width)
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
else
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
break;
case Surface.ROTATION_270:
if (width > height)
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
else
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
break;
default :
if (height > width)
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
else
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
}
https://stackoverflow.com/questions/3611457
复制相似问题