相机出现问题,除非键盘打开。

5

我这里有两个安卓设备。

在这两个设备中,当我打开我的应用程序时,相机显示的画面非常错误(通常是旋转90度并且拉伸...)

在其中一个手机上,有一个键盘,当我打开键盘时,应用程序可以正常工作...因为键盘强制要求方向,所以我想问题可能是手机始终期望相同的方向,但SDK不同意。

那么我该如何告诉相机它应该一直使用哪个方向?

1个回答

20

如果您的应用程序运行在 v2.2 或以上版本,您可以使用 camera.setDisplayOrientation(90) 来将摄像头方向旋转到纵向。

在 v2.2 版本之前,相机只能以横向方向显示,因此您必须将活动设置为横向方向。

为了支持 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及以下版本将会被淘汰。


哦,我现在明白问题了(键盘将整个应用程序强制进入横向模式,使相机正常工作)。 - speeder
是的,对于低于v2.2的设备来说确实很麻烦。我开发了一个相机应用程序,可以检测设备是否为v2.2,并将活动设置为纵向,同时使用setDisplayOrientation旋转相机显示。 v2.1及以下版本的设备则采用横向外观。 - Ryan Reeves
我对setRequestedOrientation的问题在于,我无法请求手机的方向(API总是返回PORTRAIT),因此我不知道是否要旋转相机拍摄的图像:/ 有什么提示吗? - stoefln
@Ryan Reeves,这个修复程序在一些手机上有效,而在其他手机上无效。我正在使用Android 2.2 SDK,已经有一段时间了,我找不到答案,尝试过谷歌群组的代码修复,但也没有用。如果有更多的指针或答案将会很有帮助。谢谢。 - Mukunda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接