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

如何在Google Play中筛选排除Legacy级相机硬件的设备?

解决方案

1. 调整Manifest配置,避免提前过滤可用设备

不要将android.hardware.camera.level.full设为必填,而是保留基础相机权限,并将各Camera2级别特性设为可选,这样Google Play不会过滤Limited、Level 3等支持Camera2的设备:

<!-- 基础相机必填,确保应用只面向有相机的设备 -->
<uses-feature android:name="android.hardware.camera" android:required="true" />
<!-- 可选特性,不会过滤支持这些级别的设备 -->
<uses-feature android:name="android.hardware.camera.level.full" android:required="false" />
<uses-feature android:name="android.hardware.camera.level.limited" android:required="false" />
<uses-feature android:name="android.hardware.camera.level.level_3" android:required="false" />

2. 运行时动态检测相机硬件级别,排除Legacy设备

在初始化相机前,通过系统API获取相机的硬件级别,若为INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY则提示用户设备不支持当前相机功能:

原生Camera2实现示例:

val cameraManager = getSystemService(Context.CAMERA_SERVICE) as CameraManager
try {
    // 获取第一个可用相机ID(可根据需求改为后置/前置)
    val cameraId = cameraManager.cameraIdList.first()
    val characteristics = cameraManager.getCameraCharacteristics(cameraId)
    val hardwareLevel = characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL)
    
    if (hardwareLevel == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY) {
        // 处理Legacy设备:提示用户禁用相机功能,或引导升级设备
        Toast.makeText(this, "当前设备不支持相机功能", Toast.LENGTH_SHORT).show()
        return
    }
    
    // 正常初始化Camera2流程
    cameraManager.openCamera(cameraId, stateCallback, handler)
} catch (e: CameraAccessException) {
    e.printStackTrace()
}

CameraX实现示例:

val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener({
    val cameraProvider = cameraProviderFuture.get()
    // 获取后置相机的CameraInfo
    val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
    val cameraInfo = cameraProvider.getCameraInfo(cameraSelector)
    val hardwareLevel = Camera2CameraInfo.from(cameraInfo).getCameraCharacteristic(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL)
    
    if (hardwareLevel == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY) {
        Toast.makeText(this, "当前设备不支持相机功能", Toast.LENGTH_SHORT).show()
        return@addListener
    }
    
    // 正常绑定CameraX用例
    val preview = Preview.Builder().build()
    cameraProvider.bindToLifecycle(this, cameraSelector, preview)
}, ContextCompat.getMainExecutor(this))

3. 补充说明

  • 这种方式既不用维护两套相机API,又能精准排除Legacy级设备,同时保留其他支持Camera2的设备(Limited、Level 3等)
  • 若部分Legacy设备实际可正常运行,可考虑添加白名单机制,允许特定型号的Legacy设备使用Camera2功能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:55:21