Android 安卓人像照相机的可靠性

Android 安卓人像照相机的可靠性,android,android-camera,Android,Android Camera,我正在开发一个以应用程序为目标的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("orien

我正在开发一个以应用程序为目标的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.1更新1设备和SGS2(运行ICS)上工作

我的问题是,这些解决方案跨设备具有什么样的可靠性?我已经看到了一些解决“pre-froyo”问题的方法,所以我怀疑这种方法是否适用于所有设备。我还想知道“setdisplayorientation”在不同设备上的受尊重程度

我真的很高兴听到其他人在这方面的经验


更多信息:
这就解释了这些方法在某些时候是有效的。那么,还有一个问题是,setDisplayOrientation从哪一点(SDK版本)开始一直工作的???

我相信您的方法工作得很好。如果您觉得应用程序不是独立于设备的,那么您唯一可以做的就是构建不同版本的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);
    }
}

一个奇怪的解决方案是,并非所有设备的方向都完全相同。它完全依赖于OEM,可以随设备而异(我已经在许多设备上试用过)。你不能简单地解决它。在第一次启动时显示带有摄像头预览的活动,只需询问用户建议的旋转是否是他想要的,如果不是,允许他更改。根据用户选择,您可以处理。

您好,Dragostis,谢谢您的回复。您是否发现SDK7解决方案在特定设备上不起作用?(似乎有一些评论是这样的)我是一名游戏开发者,对我来说,除了屏幕分辨率和比率不同之外,没有什么问题,我通过一个APK解决了这个问题。如果我是你的情况,我会尝试只在一个APK中测试它,并尽可能多地进行测试。是的,我们有手机要测试,但不幸的是,并不是所有的设备,这应该是一个依赖于设备的事情。我相信你所做的一切都是可以的。尝试在包括平板电脑在内的10多台设备上进行测试,以便对应用程序有足够的信心。你也可以为你的应用程序推出一个免费的测试版,让人们来测试它。好吧,我们有一个Xperia X8,这很好,但是有传言说它在X10上不起作用,所以它看起来并没有那么简单——似乎更像是一个硬件问题。不幸的是,测试版不是我们的选择。好主意。或者只需询问用户建议的旋转是否是他想要的,如果不是,允许他更改。wojci,因此这仍然意味着我们需要开发视图,以便在保持手机人像的同时,也能正确显示人像。此外,如果您尝试向用户显示正确的纵向视图,它可能会在不支持正确纵向视图的设备上被破坏,因此您将向用户显示一团混乱。此外,用户不应该认为“哦,人像照相机预览在我的手机上不起作用”。只是要明确一点,我们不是在谈论横向与纵向界面,我们总是希望在手持手机纵向时界面看起来正确;我不太明白你所说的基本旋转角度是什么意思。@Sam这里的“基本角度”是指要求用户选择模式和角度,如“显示预览”,并提供一个按钮,在完成后旋转相同的角度,然后说“确定”(例如按下“确定”按钮),你将获得与他们设置的角度相同的角度,并且与你所需的角度完全相同。。完成!!也许,在玩了这个之后,你可以用相机获得一些非常奇怪的效果,所以我不确定用户是否会理解他们的选择。嗨,这不是设置活动的方向吗?据我所知,摄像机必须设置为与活动相同的方向才能正确显示,否则会产生奇怪的效果。你有关于此解决方案如何工作的更多信息吗?啊,太晚了,这可能是一个非常有用的答案。不确定这是否有帮助,但是,在调用后使用检查方向是否正确如何在运行当前代码后检查方向如何。您可以使用camera.getParameters().getPictureSize();比较一下高度和宽度。。。?