如何判断摄像头是不是在使用中?

Posted

技术标签:

【中文标题】如何判断摄像头是不是在使用中?【英文标题】:How to find whether the camera is in use?如何判断摄像头是否在使用中? 【发布时间】:2012-06-28 12:51:17 【问题描述】:

有什么方法可以查出android Camera是否在代码中使用?

【问题讨论】:

【参考方案1】:

有什么办法可以查到安卓相机是否在使用中?

是的,如果相机正在使用Camera.open() 会给你一个例外。

来自docs,

/** A safe way to get an instance of the Camera object. */
public static Camera getCameraInstance()
    Camera c = null;
    try 
        c = Camera.open(); // attempt to get a Camera instance
    
    catch (Exception e)
        // Camera is not available (in use or does not exist)
    
    return c; // returns null if camera is unavailable

【讨论】:

谢谢。如果发现相机已经在使用中,我该如何使用相机?在catch块中释放相机然后再次尝试打开它是否正确? @user1414146 你必须等到其他应用程序用相机完成 :) 然后重试。【参考方案2】:

我不知道为什么这个问题被问了好几次,一旦你开始自己的活动或应用程序相机本身将被释放,因为正在为相机运行的活动将进入暂停状态。

【讨论】:

但是如果他正在运行后台服务,那么当他运行他的代码时,相机应用程序可能在前面。 并非所有应用程序或代码都以这种方式运行,尽管它是推荐用于前台应用程序的。【参考方案3】:

我知道这是一个非常古老的问题,但我通过谷歌搜索偶然发现了它,想知道同样的事情。使用较新版本的android,您可以注册CameraManager.AvailabilityCallback 以确定相机是否在使用中。下面是一些示例代码:

import android.hardware.camera2.CameraManager;

    // within constructor
    // Figure out if Camera is Available or Not
    CameraManager cam_manager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE);
    cam_manager.registerAvailabilityCallback(camAvailCallback, mHandler);


    CameraManager.AvailabilityCallback camAvailCallback = new CameraManager.AvailabilityCallback() 
    public void onCameraAvailable(String cameraId) 

        cameraInUse=false;
        Log.d(TAG, "notified that camera is not in use.");

    

    public void onCameraUnavailable(String cameraId) 

        cameraInUse=true;
        Log.d(TAG, "notified that camera is in use.");

    
;

【讨论】:

注意,在 android 5.1 中存在一个可能被破坏的错误 - code.google.com/p/android/issues/detail?id=164769 。对于这些版本,您必须先调用cam_manager.getCameraIdList() 以正确初始化服务,然后才能注册AvailabilityCallback。【参考方案4】:

你可以试试这个方法。如果它返回true,那么相机仍在被某些应用程序使用。

public boolean isCameraUsebyApp() 
    Camera camera = null;
    try 
        camera = Camera.open();
     catch (RuntimeException e) 
        return true;
     finally 
        if (camera != null) camera.release();
    
    return false;

然后在相机需要重启时向用户显示 toast 以重启设备。

【讨论】:

以上是关于如何判断摄像头是不是在使用中?的主要内容,如果未能解决你的问题,请参考以下文章

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

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

怎样判断是不是已经安装了

如何根据拍摄的图像来判断物体中心与摄像头的角度

如何在 Raspberry Pi Motion 中访问网络摄像头,而不是使用端口

unity 怎么判断物体是不是在摄像机范围内