我已经实现了使用
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; }