7

有什么办法可以找到代码中是否正在使用 Android相机

4

4 回答 4

4

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

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

文档中,

/** 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
}
于 2012-06-27T06:14:00.577 回答
2

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

于 2012-06-27T06:17:08.560 回答
2

您可以尝试此方法。如果它返回 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 以重新启动设备。

于 2016-06-07T10:18:07.910 回答
2

我知道这是一个非常古老的问题,但我在谷歌搜索时偶然发现了它,想知道同样的事情。使用较新版本的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.");

    }
};
于 2015-09-24T03:03:10.427 回答