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

Android开发中如何获取闪光灯的默认与最大强度等级

Android闪光灯强度等级获取实现方案

前置说明

  • 闪光灯强度调节的公开标准API从Android 13(API 33,即TIRAMISU版本)开始正式提供,低版本系统无统一公开实现方案,各厂商私有API兼容性极差,不建议适配
  • 所有取值逻辑必须先做版本判断、硬件支持判断,避免触发崩溃

核心取值逻辑

你需要通过系统CameraManager服务获取摄像头特征参数,直接读取两个官方定义的int类型字段即可拿到需要的数值:

  • 最大闪光灯强度:对应CameraCharacteristics.FLASH_INFO_STRENGTH_MAXIMUM_LEVEL,直接赋值给SeekBar的max属性
  • 默认闪光灯强度:对应CameraCharacteristics.FLASH_INFO_STRENGTH_DEFAULT_LEVEL,直接赋值给SeekBar的初始progress属性

特殊情况处理:如果读取到的最大强度值为1,代表当前设备闪光灯仅支持开/关两档,不支持亮度分级调节,直接隐藏强度调节控件即可。

注意:不要硬编码后置摄像头ID为"0",部分多摄、折叠屏设备的带闪光灯后置摄像头ID不一定为0,建议遍历摄像头列表做校验,兼容性更好

可直接复用的代码实现(Kotlin)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    val cameraManager = getSystemService(Context.CAMERA_SERVICE) as CameraManager
    var backFlashCameraId: String? = null
    // 遍历查找带闪光灯的后置摄像头
    for (cameraId in cameraManager.cameraIdList) {
        val characteristics = cameraManager.getCameraCharacteristics(cameraId)
        val hasFlash = characteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE) ?: false
        val lensFacing = characteristics.get(CameraCharacteristics.LENS_FACING)
        if (hasFlash && lensFacing == CameraCharacteristics.LENS_FACING_BACK) {
            backFlashCameraId = cameraId
            break
        }
    }

    backFlashCameraId?.let { camId ->
        val cameraChars = cameraManager.getCameraCharacteristics(camId)
        // 读取两个关键等级值,空值时默认回退到1(全开档位)
        val maxLevel = cameraChars.get(CameraCharacteristics.FLASH_INFO_STRENGTH_MAXIMUM_LEVEL) ?: 1
        val defaultLevel = cameraChars.get(CameraCharacteristics.FLASH_INFO_STRENGTH_DEFAULT_LEVEL) ?: 1

        if (maxLevel > 1) {
            // 设备支持亮度调节,初始化SeekBar
            flashLevelSeekBar.apply {
                max = maxLevel
                progress = defaultLevel
            }
            // SeekBar进度回调中直接调用以下方法即可实时调整亮度
            // cameraManager.setTorchStrengthLevel(camId, progress)
        } else {
            // 不支持调节,隐藏控件
            flashLevelSeekBar.visibility = View.GONE
        }
    }
}

补充注意事项

  • 调用setTorchStrengthLevel调整亮度时,必须确保手电筒已经处于开启状态,否则设置不会生效
  • 应用退出、手电筒关闭时,系统会自动将闪光灯亮度重置为默认等级,不需要手动还原
  • 不要使用反射调用隐藏接口实现低版本适配,碎片化问题会导致大量机型适配异常

内容的提问来源于stack exchange,提问作者Omar Hemaia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:00:54