使用Intent在纵向模式下打开相机

8

我可以通过以下方式使用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启动设备相机时实现这一点。
谢谢...

1
这个链接说它可以使用相机类,但我正在使用意图。 - Neha Shukla
在调用相机意图时添加以下代码并检查其是否起作用: i.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); Neha? - Pratik Dasa
1
我尝试过这个,但仍然以横向模式打开... - Neha Shukla
我现在也在处理同样的问题。你找到了有效的解决方案吗?@NehaShukla - Sash_KP
1
http://stackoverflow.com/q/25310573/1288 - Bill the Lizard
显示剩余8条评论
3个回答

4
这是使用外部应用程序处理功能时出现的问题。理论上,接受“Intent”操作的应用程序应该正确处理“Intent”并返回你所要求的数据,但实际上你很难强制执行这种行为...例如,任何应用程序都可以说它处理“图像捕获”,但如果你将你的“Intent”传递给一个编程不良或恶意的应用程序,那么没有什么能阻止该应用程序完成与你预期完全不同的事情,或者根本什么也不做。如果选择让你的应用程序放弃控制权以实现某些功能,则承担无法实现该功能的风险。
在你寻找添加“Intent”额外功能的特定案例中,没有办法回答这个问题,适用于所有相机应用程序。你需要找到支持你想要的应用程序,找出如何将其强制置于纵向模式,然后祈祷你的所有用户都安装了该应用程序。确保你的应用始终按照你的意愿拍摄照片的选择非常少:
- 为你的相机“Intent”创建一个选择器,并仅限于测试过且正常工作的应用程序。如果特定的应用程序未安装,则禁用拍照功能。 - 自己实现图像捕获。

1
您无法强制第三方应用以任何特定方向启动。实际上,我注意到每当我从我的(竖屏)应用中启动标准相机应用程序时,相机应用程序会切换到横屏。
如果您的目标是确保用户在启动相机时将手机保持为竖屏,则需要一个非常简单的仅竖屏的第三个活动。然后:
1. 从您的横屏主应用程序启动此活动。 2. 此活动具有一些竖屏 UI,因此用户会旋转手机以阅读它。 3. 此活动像上面一样启动相机。 4. 当此活动获得结果时,它使用 setResult() 将其直接传递给您的主要活动。
要拥有更高级别的控制权,您必须编写自己的相机应用程序或要求用户使用满足您需求的特定相机。

1

所有的解决方案都不起作用。布局没有问题。通过在更高版本(API10到API15)上运行,我使它工作了。很奇怪!


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