android – 相机错误“无法连接到相机”或某些手机中出现错误“相机正在使用其他应用”

我已经实现了使用 Android MediaRecorder在后台录制音频,如果录音正在进行中并且用户打开了原生相机来录制视频,它给出了

Camera Error “Can’t Connect to the Camera”

或者在某些手机上,错误显示

Your camera is in use by another application

如果我停止mediarecorder然后原生相机视频录制工作正常,我搜索事件,以了解相机何时开始视频,然后在我的应用程序中我停止mediarecorder,我发现broadcastReceiver带过滤器

<receiver android:name=".receiver.CameraReceiver">
            <intent-filter android:priority="10000">
            <action android:name="android.Medintent.action.CAMERA_BUTTON" />
            <action android:name="android.hardware.action.NEW_PICTURE" />
            <action android:name="android.hardware.action.NEW_VIDEO" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
            <data android:mimeType="video/*" />
        </intent-filter>
    </receiver>

捕获图片或视频并将其保存在目录中时触发NEW_VIDEO和NEW_PICTURE事件.任何人都知道如何解决这个问题?我希望在我的应用程序中知道Native / Camera Apps要录制视频时的事件.提前致谢

解决方法

即使我有同样的问题.
一旦应用程序正在使用相机资源,直到它被释放,您可以在其他应用程序甚至服务中使用它们.
如果任何服务正在使用相机资源,直到它发布相同,我们不能使用相机硬件.
如果使用此代码正在使用相机硬件,您可以重复检查: –
private boolean isCameraInUse() {
    Log.v(TAG,"isCameraInUse()");
    boolean isCameraInUse = false;
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)//Use Camera Api for Version Code < 23 and mCamera manager above it.
    {
        String cameraId = null;
        CameraManager camManager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE);
        // Usually front mCamera is at 0 position.
        try {
            cameraId = camManager.getCameraIdList()[0];
        } catch (CameraAccessException e) {
            Log.e(TAG,Log.getStackTraceString(e));
            isCameraInUse = true;
        }
        try {
            camManager.setTorchMode(cameraId,true);
            camManager.setTorchMode(cameraId,false);
        } catch (CameraAccessException e) {
            Log.e(TAG,Log.getStackTraceString(e));
            isCameraInUse = true;
        }
    } else {
        Camera c = null;
        try {
            c = Camera.open();
        } catch (RuntimeException e) {
            Log.e(TAG,Log.getStackTraceString(e));
            turnFlashOff(mContext);
            isCameraInUse = true;
        } finally {
            if (c != null) c.release();
        }
    }
    return isCameraInUse;
}

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...