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

时间:2014-05-23 05:23:54

标签: android android-camera android-camera-intent

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

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启动设备的相机时告诉我如何执行此操作。

...谢谢

3 个答案:

答案 0 :(得分:3)

这是使用外部应用程序为您处理功能的问题。理论上,接受Intent操作的应用程序应该正确处理Intent并返回您要求的数据,但实际上,您可以采取的措施很少来强制执行此行为...例如,任何应用程序都可以说它处理"图像捕获,"但如果您将Intent传递给程序不佳或恶意的应用程序,则无法阻止该应用程序执行与您预期完全不同的操作,或者根本没有任何操作。如果您选择让您的应用程序放弃对另一个应用程序的控制以实现某些功能,您将承担选择任何应用程序无法实现该功能的风险。

在您寻找能够添加Intent额外内容的特定情况下,任何人都无法回答适用于所有相机应用的问题。您需要找到一个支持您想要的内容,找出如何强制它进入纵向模式,然后祈祷所有用户都安装了该特定应用程序。实际上很少有选项可以确保您的应用以您希望的方式拍摄照片:

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

答案 1 :(得分:1)

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

如果你设置了一个更为温和的目标,即确保用户在启动相机时以纵向方式拿着手机,你需要的是一个非常简单的第三个活动,它只是肖像。然后:

  1. 从您的横向主应用中启动此活动。
  2. 此活动有一些纵向用户界面,因此用户可以旋转手机进行阅读。
  3. 此活动启动相机,就像您在上面一样。
  4. 当此活动获得结果时,会使用setResult()
  5. 将其直接传递到您的主要活动

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

答案 2 :(得分:1)

这些解决方案都不起作用。布局也没有任何问题。我通过运行更高版本(API10到API15)来实现它。怪异!!