8

我正在开发一个面向应用程序的 SDK 8,其中包含使用相机视图的 min SDK 7。

显然,旋转相机拍摄人像的问题已经进行了相当多的讨论。我目前有以下将 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”的尊重程度如何......

听到其他人对此的经验,我将非常感激。


所以更多信息:如何正确设置Android相机方向? 这解释了这些方法在某些时候有效。那么进一步的问题是从什么时候(SDK版本) setDisplayOrientation 开始工作?

4

3 回答 3

1

一种奇怪的解决方案是,所有设备的方向都不完全相同。它完全依赖于 OEM,可以改变设备(我在许多设备上尝试过)。你不能简单地修复它。在首次启动时显示带有相机预览的 Activity,并询问用户建议的旋转是否是他想要的,如果不是,允许他更改它。根据用户选择,您可以处理它。

于 2012-08-30T12:48:36.483 回答
0

我相信你的方法效果很好。如果您觉得应用程序与设备无关,那么您唯一可以做的就是构建不同版本的 APK。

于 2012-08-28T16:22:38.913 回答
0

我认为检查 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);
    }
}
于 2012-08-30T12:37:39.573 回答