You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中使用Intent调用相机无法以横屏模式打开的问题求助

解决Android调用系统相机强制横屏的问题

我之前也踩过这个坑——MediaStore.EXTRA_SCREEN_ORIENTATION这个参数很多系统相机根本不买账,试试下面几个靠谱的方案:

方案一:临时锁定当前Activity的屏幕方向(兼容性最好)

这个思路是先把发起相机请求的Activity强制设为横屏,系统相机启动时会继承这个方向,拍完之后再恢复原来的方向:

  1. 先保存当前Activity的原始屏幕方向:
val originalOrientation = requestedOrientation
  1. 强制当前Activity为横屏:
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
  1. 启动相机Intent:
val cameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(cameraIntent, REQUEST_CODE_CAMERA) // 替换成你的请求码
  1. 在回调里恢复原始方向(以onActivityResult为例,用registerForActivityResult同理):
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == REQUEST_CODE_CAMERA) {
        requestedOrientation = originalOrientation
    }
}

这个方法几乎适配所有机型,因为它从你的Activity层面控制方向,相机启动时会跟随当前Activity的方向。

方案二:在Manifest中固定Activity方向(适合拍照专用页面)

如果这个Activity就是专门用来拍照的,不需要竖屏模式,可以直接在Manifest里给Activity加配置:

<activity
    android:name=".YourCameraActivity"
    android:screenOrientation="landscape">
</activity>

这个方法最简单,但如果你的Activity需要同时支持横竖屏,就不太适用了。

方案三:尝试厂商兼容参数(非标准,慎用)

有些厂商的相机支持自定义方向参数,你可以试试替换成这个键:

cameraIntent.putExtra("android.intent.extra.orientation", ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

不过这不是Android官方标准参数,兼容性很差,只适合特定机型的适配场景。

注意事项

不同品牌的系统相机行为差异很大,比如部分三星、小米的相机可能会强制遵循系统自动旋转设置,这时候方案一依然是最稳妥的选择。

内容的提问来源于stack exchange,提问作者Owies AL omari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 22:42:32