我正在使用min SDK 7开发一个针对SDK 8的应用程序,该SDK使用摄像头视图。
显然有一个旋转相机肖像的问题,已经有相当多的讨论。我目前有以下修复程序将SDK 7和8+分开:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.FROYO){
theCamera.setDisplayOrientation(90);
} else {
parameters.set("orientation", "portrait");
parameters.set("rotation",90);
}
这适用于2.1update1设备和我拥有的SGS2(运行ICS)。
我的问题是,这些解决方案在各种设备上具有何种可靠性?我已经看到了'pre-froyo'情况的一些解决方案,所以我怀疑这个解决方案适用于所有设备。我也想知道'setdisplayorientation'在不同的设备上有多尊重......
听到其他人的经验,我真的很感激。
所以更多信息:How to set Android camera orientation properly?这解释了这些方法在某些时候有效。那么从什么点(SDK版本)setDisplayOrientation开始工作的所有时间的进一步问题?
一个奇怪的解决方案,所有设备的方向都不完全相同。它完全取决于硬件,可以改变设备到设备(我已尝试过许多设备)。您无法简单地修复它,只有一个选项允许用户在第一次启动应用程序时设置旋转,获得用户设置的基本旋转角度,并将其保存到设置中,一旦完成,您可以执行任何操作想要事后。
我相信你的方法效果很好。如果您觉得应用程序不是设备独立的,那么您唯一可以做的就是构建不同版本的APK。
我认为检查api级别不是处理这个问题的正确方法。请查看以下代码以锁定方向。
public static void lockRotation(final AndroidActivity activity) {
Display display = ((WindowManager) activity.getSystemService(activity.WINDOW_SERVICE)).getDefaultDisplay();
// Lock the rotation effect
// For every 90 degrees we have an other orientation (not only landscape & portrait)
if (Surface.ROTATION_0 == display.getOrientation()) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else if (Surface.ROTATION_270 == display.getOrientation()) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else if (Surface.ROTATION_90 == display.getOrientation()) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
} else if (Surface.ROTATION_180 == display.getOrientation()) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}
}