【问题标题】:Camera is wrong unless keyboard is open除非打开键盘,否则相机是错误的
【发布时间】:2011-03-31 18:34:07
【问题描述】:

我这里有 2 个机器人。

在他们两个中,当我打开我的应用程序时,摄像头显示非常错误(侧身转动 90 度并且通常拉伸......)

在其中一部手机中,有一个键盘,当我打开键盘时,应用程序可以正常工作...由于键盘强制定向,我认为问题在于手机总是期望相同的方向,但SDK 不同意。

然后我如何通知相机它应该一直使用什么方向?

【问题讨论】:

    标签: android


    【解决方案1】:

    如果您的应用程序在 v2.2 或更高版本上运行,您可以使用 camera.setDisplayOrientation(90) 将相机方向旋转为纵向。

    在 v2.2 之前,相机只能横向显示,因此您必须将 Activity 设置为横向。

    为了支持 v2.2(API 级别 8)之前和之后的设备,一种解决方案是在 AndroidManifest.xml 中将活动方向默认为横向。然后在运行时检查 API 级别,如果 froyo 或更高,将活动方向更改为纵向并旋转相机显示。

    //in activity onCreate method
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO)
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    
    //After opening camera - call via reflection
    Method rotateMethod = android.hardware.Camera.class.getMethod("setDisplayOrientation", int.class);
    rotateMethod.invoke(mCamera, 90);
    

    这是最直接的解决方案,希望随着新设备的推出,v2.1 及以下版本将不再受到关注。

    【讨论】:

    • 哦,我现在看到了问题(键盘强制整个应用进入横向,使相机正常工作)。
    • 是的,对于低于 v2.2 的设备来说,这很痛苦。我构建了一个相机应用程序,用于检测设备是否为 v2.2 并将活动设置为纵向以及使用 setDisplayOrientation 旋转相机显示。 v2.1 及更低版本的设备具有横向外观。
    • setRequestedOrientation 的问题是,我无法请求手机的方向(我总是从 API 获取 PORTRAIT),因此我不知道是否要旋转拍摄的图像是否通过相机:/并提示?
    • @Ryan Reeves 此修复适用于某些手机,但不适用于其他某些手机。我正在使用 Android 2.2 SDK,我已经有一段时间找不到答案了,也尝试使用 google groups 代码修复但无法正常工作。任何更多的指针或答案都会有所帮助。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 2021-10-25
    • 2019-08-14
    • 2021-11-20
    相关资源
    最近更新 更多