我正在开发一款展示相机预览的Android应用。理想情况下,我希望应用程序在纵向模式下工作,这意味着我需要处理相机预览图像的旋转。
我只需要支持API级别8(Android 2.2版)及以上版本,因此我可以使用Camera.setDisplayOrientation来设置方向,该方法的API文档包含一个setDisplayOrientation函数,可以完成我想要的操作。唯一的问题是它使用API Level 9 Camera.CameraInfo来获取相机相对于设备的方向(可能是为了处理横向与纵向设备)。
因此可以安全地假设我可以为所有8级设备执行setDisplayOrientation(90)并且只为新设备使用CameraInfo.orientation吗?
答案 0 :(得分:2)
我在HTC Evo Shift上尝试了以下项目,项目设置为API8(效果很好):
Configuration cfg = mContext.getResources().getConfiguration();
if (cfg.orientation == Configuration.ORIENTATION_PORTRAIT) {
mCamera.setDisplayOrientation(90);
}
答案 1 :(得分:1)
作为其他任何人发现这一点的后续行动 - 我没有找到明确的答案,所以我按照上面的建议(setDisplayOrientation(90))为2.2设备做了并发布了应用程序。它有大约70,000次下载,没有关于相机显示错误旋转90度的报告,所以看起来这是一个合理的解决方案。
答案 2 :(得分:0)
我发布链接到Android的开发者帮助相机问题: http://developer.android.com/guide/topics/media/camera.html
关于你的具体问题,我看了一下API,我猜,因为每次表面改变而设备只有2个位置时都会调用surfaceChanged方法,你可能是对的,因为你实现了surfaceChanged方法中的更正方法。尝试实现它,如果你不能让它工作发布问题,我会尝试提供更多帮助。