Android 判断是否有可用摄像头(前置,后置,USB外接)

前言:

        判断设备是否有能用的摄像头,以便后续启用某些功能

实现:

        Java:

/*
 *作者:赵星海
 *时间:2021/3/23 15:44
 *用途:是否有可用摄像头
 */
public static boolean isCamera() {
    boolean result;
    Camera camera = null;
    try {
        camera = Camera.open();
        if (camera == null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
            boolean connected = false;
            for (int camIdx = 0; camIdx < Camera.getNumberOfCameras(); ++camIdx) {
                Log.d(TAG, "Trying to open camera with new open(" + Integer.valueOf(camIdx) + ")");
                try {
                    camera = Camera.open(camIdx);
                    connected = true;
                } catch (RuntimeException e) {
                    Log.e(TAG, "Camera #" + camIdx + "failed to open: " + e.getLocalizedMessage());
                }
                if (connected) {
                    break;
                }
            }
        }
        List<Camera.Size> supportedPreviewSizes = camera.getParameters().getSupportedPreviewSizes();
        result = supportedPreviewSizes != null;
        //start the preview
        Log.d(TAG, "startPreview");
        camera.startPreview();
    } catch (Exception e) {
        Log.e(TAG, "Camera is not available (in use or does not exist): " + e.getLocalizedMessage());
        result = false;
    } finally {
        if (camera != null) {
            camera.release();
        }
    }
    return result;
}

        kotlin:

/*
 *作者:赵星海
 *时间:2021/3/23 15:44
 *用途:是否有可用摄像头
 */
fun isCamera(): Boolean {
            var result: Boolean
            var camera: Camera? = null
            try {
                camera = Camera.open()
                if (camera == null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
                    var connected = false
                    for (camIdx in 0 until Camera.getNumberOfCameras()) {
                        Log.d("TAG", "Trying to open camera with new open(" + Integer.valueOf(camIdx) + ")")
                        try {
                            camera = Camera.open(camIdx)
                            connected = true
                        } catch (e: RuntimeException) {
                            Log.e("TAG", "Camera #" + camIdx + "failed to open: " + e.localizedMessage)
                        }
                        if (connected) {
                            break
                        }
                    }
                }
                val supportedPreviewSizes: List<Camera.Size> = camera?.getParameters()?.getSupportedPreviewSizes() as List<Camera.Size>
                result = supportedPreviewSizes != null
                //start the preview 
                Log.d("TAG", "startPreview")
                camera?.startPreview()
            } catch (e: java.lang.Exception) {
                Log.e("TAG", "Camera is not available (in use or does not exist): " + e.localizedMessage)
                result = false
            } finally {
                if (camera != null) {
                    camera.release()
                }
            }
            return result
        }

更多内容推荐:

https://blog.csdn.net/qq_39731011/category_7565212.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=7565212&sharerefer=PC&sharesource=qq_39731011&sharefrom=from_linkicon-default.png?t=O83Ahttps://blog.csdn.net/qq_39731011/category_7565212.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=7565212&sharerefer=PC&sharesource=qq_39731011&sharefrom=from_link

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵星海(深海呐)

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值