Android人像摄像头可靠性

时间:2012-07-24 19:47:27

标签: android android-camera

我正在使用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开始工作的所有时间的进一步问题??

3 个答案:

答案 0 :(得分:1)

一个奇怪的解决方案,所有设备的方向都不完全相同。它完全取决于OEM,可以改变设备到设备(我已尝试过许多设备)。你不能简单地解决它。首次启动时显示带有摄像头预览的活动,只询问用户建议的旋转是否符合他的要求,如果没有,则允许他更改。根据用户选择,您可以处理它。

答案 1 :(得分:0)

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

答案 2 :(得分: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);
    }
}