Nav*_*mad 9 camera android video-capture android-camera mediarecorder
我已经实现了使用Android MediaRecorder在后台录制音频,如果录音正在进行中并且用户打开了原生相机来录制视频,它给出了
相机错误"无法连接到相机"
或者在某些手机上,错误显示为
您的相机正在被其他应用程序使用
如果我停止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>
Run Code Online (Sandbox Code Playgroud)
在捕获图片或视频并将其保存在目录中时触发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;
}
Run Code Online (Sandbox Code Playgroud)