使用 Intent 以纵向模式打开相机

Posted

技术标签:

【中文标题】使用 Intent 以纵向模式打开相机【英文标题】:Opening Camera in Portrait mode using Intent 【发布时间】:2014-07-12 08:34:28 【问题描述】:

我可以使用Intent 从我的Activity 打开设备的相机,如下所示:

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
Uri fileUri = getOutputMediaFileUri();
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
cameraIntent.putExtra("android.intent.extras.CAMERA_FACING", 1);
startActivityForResult(cameraIntent, CAMERA_REQUEST);

我的问题是我的Activity设置为横向模式,所以当相机打开时,它也以横向模式打开-但我需要打开仅限人像模式下的相机。

所以请让我知道在使用Intent 启动设备的相机时如何执行此操作。

谢谢...

【问题讨论】:

看到这个帖子***.com/questions/10259299/… 这可能会帮助你***.com/questions/8516118/… 此链接表示当我使用 Intent 时它将与 Camera 类一起使用 我试过了,但仍然以横向模式打开.. ***.com/q/25310573/1288 【参考方案1】:

这是使用外部应用为您处理功能的问题。理论上,接受Intent 操作的应用程序应该正确处理Intent 并返回您要求的数据,但实际上您几乎无法强制执行此行为......例如,任何应用程序都可以说它处理“图像捕获”,但如果您要将 Intent 传递给编程不佳或恶意的应用程序,则没有什么可以阻止该应用程序执行与您的预期完全不同的事情,或者根本不做任何事情。如果您选择让您的应用将控制权交给另一个应用来实现某些功能,那么您将面临选择的任何应用都无法实现该功能的风险。

在您正在寻找添加Intent 附加功能的特殊情况下,没有人可以回答适用于所有相机应用程序的问题。你需要找到一个支持你想要的东西,弄清楚如何强制它进入纵向模式,然后祈祷你的所有用户都安装了那个特定的应用程序。始终确保您的应用按照您希望的方式拍照的选项非常少:

为您的相机意图创建一个选择器,并将结果限制为仅适用于您已测试并知道按预期工作的应用程序。如果未安装特定应用,请禁用拍照功能。 自己实现图像捕获。

【讨论】:

【参考方案2】:

您不能强制第三方应用以任何特定方向启动。事实上,我注意到每当我从我的(纵向)应用启动标准相机应用时,相机应用就会切换到横向。

如果您设定的目标较为温和,即确保用户在启动相机时以纵向方式握住手机,那么您需要一个非常简单的仅纵向的第三个活动。那么:

    从您的横向主应用启动此活动。 此活动有一些纵向 UI,因此用户可以旋转手机来阅读它。 此活动启动相机,就像您在上面所做的那样。 当这个活动得到结果时,它会直接通过setResult() 将它传递给你的主要活动。

要获得更高级别的控制,您必须编写自己的相机应用程序或要求用户使用特定的相机来满足您的需求。

【讨论】:

【参考方案3】:

这些解决方案都不起作用。布局也没有问题。我通过在更高版本(API10 到 API15)上运行来让它工作。奇怪!!

【讨论】:

以上是关于使用 Intent 以纵向模式打开相机的主要内容,如果未能解决你的问题,请参考以下文章

以纵向模式从相机拍摄的加载到画布上的照片是横向的

Android相机以人像模式保存图片

在 iOS OpenCV 相机中将相机预览旋转到人像

即使我的活动在 android 2.3.1 中处于纵向模式,如何将 framelayout 设置为横向

如何使用Android中的Camera.Parameter在黑白模式下打开和捕捉相机图片

Android - 在横向和纵向模式之间切换使 Intent 失去价值