Android人像摄像头可靠性

问题描述 投票:8回答:3

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

android android-camera
3个回答
1
投票

一个奇怪的解决方案,所有设备的方向都不完全相同。它完全取决于硬件,可以改变设备到设备(我已尝试过许多设备)。您无法简单地修复它,只有一个选项允许用户在第一次启动应用程序时设置旋转,获得用户设置的基本旋转角度,并将其保存到设置中,一旦完成,您可以执行任何操作想要事后。


0
投票

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


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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.