如何检查设备是不是有分别用于前置和后置摄像头的闪光灯?

Posted

技术标签:

【中文标题】如何检查设备是不是有分别用于前置和后置摄像头的闪光灯?【英文标题】:How to check if the device has a flash for front and back facing camera separately?如何检查设备是否有分别用于前置和后置摄像头的闪光灯? 【发布时间】:2015-12-25 02:51:46 【问题描述】:

我目前正在处理相机活动。当我自动切换到前置摄像头时,我设法访问了设备的后置摄像头闪光灯并隐藏了闪光灯切换按钮。但是,我想知道是否有一种方法可以检查辅助闪光灯,因为许多智能手机型号都带有前置摄像头闪光灯,并且在从没有后置摄像头闪光灯的平板电脑上使用此应用程序时也会有所帮助。我的想法是使用两个独立的布尔值分别检查前置和后置摄像头闪光灯,如果闪光灯不可用,则将切换按钮设置为不可见。我真的不喜欢在不确保设备的任何相机中有闪光灯的情况下显示或隐藏闪光灯按钮的想法。这就是我到目前为止所拥有的。有什么想法吗?

private boolean hasFlash(Context Context) 
    if (Context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) 
        return true;
     else 
        return false;
    

_

 if (!hasFlash(Context)) 
            ImageButton FlashButton = (ImageButton) findViewById(R.id.frnxcameraflashbutton);
                            FlashButton.setVisibility(View.INVISIBLE);
                            FlashButton.setImageResource(R.mipmap.cameraflashoffbutton);
        

【问题讨论】:

【参考方案1】:

如果您能够使用新的Camera2 API(我认为大多数是 21+),则每个相机可用的 CameraCharacteristics 键值映射应该指示每个相机是否有相应的闪光灯。例如,您可能只需检查每个相机的 FLASH_STATE_UNAVAILABLE 标志即可实现您的目标。

【讨论】:

感谢您的回答。我为此活动使用了已弃用的相机,因此大多数 API 都可以使用此应用程序。是否可以将 Camera2 也包含到相同的活动中并获得相同的结果? 您可以在 Lollipop 和更新版本上使用 Camera2 API,并回退到旧设备上的现有实现。参见例如this answer 了解更多详情。 这当然是个好主意,但我必须编写 Camera2 模拟活动才能实现这个新的未来,对吧?无论如何,非常感谢您提供这些信息,您的回答非常完美。 是的,您需要同时维护 Camera1 和 Camera2 的东西,并且只会在较新的设备上看到好处。【参考方案2】:

如果我们使用的是CameraX,我们可以如下图所示。

var imageCapture: ImageCapture = ImageCapture.Builder()
                .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
                .setFlashMode(flashMode)
                .setTargetRotation(Surface.ROTATION_0)
                .build()


下面的代码可用于检查设备上是否有闪存单元。

val cameraProviderFuture: ListenableFuture<ProcessCameraProvider> = ProcessCameraProvider.getInstance(requireContext())

//Get camera provider
val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()

//Get camera object after binding to lifecycle
var camera: Camera = cameraProvider.bindToLifecycle(this as LifecycleOwner, cameraSelector, preview, imageCapture)

一旦我们有了相机对象,我们就可以使用它来获取 CameraInfo 并检查闪光灯是否可用。

camera?.cameraInfo?.hasFlashUnit()

【讨论】:

以上是关于如何检查设备是不是有分别用于前置和后置摄像头的闪光灯?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查设备是不是有闪光灯 LED android

android Camera 如何判断当前使用的摄像头是前置还是后置

如何打开安卓设备的前置手电筒(不是后置手电筒)

前置摄像头和后置摄像头同时打开?

同时使用前置和后置摄像头android

在 Android 设备上选择后置摄像头 - jsartoolkit5