feat(android): Added pause and resume recording (#2911)

* Added pause and resume recording functionality for android version 24 onwards

* Added pause and resume recording functions to Camera1.java

Co-authored-by: Pradeep Asundi <pradeep@asundi.in>
This commit is contained in:
Pradeep S Asundi 2020-07-22 03:02:33 +05:30 committed by GitHub
parent 951fcbd397
commit 360a5b0ce2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 107 additions and 0 deletions

View File

@ -852,6 +852,16 @@ class Camera1 extends CameraViewImpl implements MediaRecorder.OnInfoListener,
}
}
@Override
void pauseRecording() {
pauseMediaRecorder();
}
@Override
void resumeRecording() {
resumeMediaRecorder();
}
@Override
int getCameraOrientation() {
return mCameraInfo.orientation;
@ -1569,6 +1579,18 @@ class Camera1 extends CameraViewImpl implements MediaRecorder.OnInfoListener,
}
}
private void pauseMediaRecorder() {
if (Build.VERSION.SDK_INT >= 24) {
mMediaRecorder.pause();
}
}
private void resumeMediaRecorder() {
if (Build.VERSION.SDK_INT >= 24) {
mMediaRecorder.resume();
}
}
@Override
public ArrayList<int[]> getSupportedPreviewFpsRange() {
return (ArrayList<int[]>) mCameraParameters.getSupportedPreviewFpsRange();

View File

@ -44,6 +44,7 @@ import android.util.SparseIntArray;
import android.view.Surface;
import android.os.Handler;
import android.os.Looper;
import android.os.Build;
import com.facebook.react.bridge.ReadableMap;
@ -619,6 +620,16 @@ class Camera2 extends CameraViewImpl implements MediaRecorder.OnInfoListener, Me
}
}
@Override
void pauseRecording() {
pauseMediaRecorder();
}
@Override
void resumeRecording() {
resumeMediaRecorder();
}
@Override
public void setFocusDepth(float value) {
if (mFocusDepth == value) {
@ -1428,6 +1439,18 @@ class Camera2 extends CameraViewImpl implements MediaRecorder.OnInfoListener, Me
mVideoPath = null;
}
private void pauseMediaRecorder() {
if (Build.VERSION.SDK_INT >= 24) {
mMediaRecorder.pause();
}
}
private void resumeMediaRecorder() {
if (Build.VERSION.SDK_INT >= 24) {
mMediaRecorder.resume();
}
}
/**
* Unlocks the auto-focus and restart camera preview. This is supposed to be called after
* capturing a still picture.

View File

@ -635,6 +635,14 @@ public class CameraView extends FrameLayout {
mImpl.stopRecording();
}
public void pauseRecording() {
mImpl.pauseRecording();
}
public void resumeRecording() {
mImpl.resumeRecording();
}
public void resumePreview() {
mImpl.resumePreview();
}

View File

@ -105,6 +105,10 @@ abstract class CameraViewImpl {
abstract void stopRecording();
abstract void pauseRecording();
abstract void resumeRecording();
abstract int getCameraOrientation();
abstract void setDisplayOrientation(int displayOrientation);

View File

@ -324,6 +324,48 @@ public class CameraModule extends ReactContextBaseJavaModule {
});
}
@ReactMethod
public void pauseRecording(final int viewTag) {
final ReactApplicationContext context = getReactApplicationContext();
UIManagerModule uiManager = context.getNativeModule(UIManagerModule.class);
uiManager.addUIBlock(new UIBlock() {
@Override
public void execute(NativeViewHierarchyManager nativeViewHierarchyManager) {
final RNCameraView cameraView;
try {
cameraView = (RNCameraView) nativeViewHierarchyManager.resolveView(viewTag);
if (cameraView.isCameraOpened()) {
cameraView.pauseRecording();
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
@ReactMethod
public void resumeRecording(final int viewTag) {
final ReactApplicationContext context = getReactApplicationContext();
UIManagerModule uiManager = context.getNativeModule(UIManagerModule.class);
uiManager.addUIBlock(new UIBlock() {
@Override
public void execute(NativeViewHierarchyManager nativeViewHierarchyManager) {
final RNCameraView cameraView;
try {
cameraView = (RNCameraView) nativeViewHierarchyManager.resolveView(viewTag);
if (cameraView.isCameraOpened()) {
cameraView.resumeRecording();
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
@ReactMethod
public void getSupportedRatios(final int viewTag, final Promise promise) {
final ReactApplicationContext context = getReactApplicationContext();

View File

@ -624,6 +624,14 @@ export default class Camera extends React.Component<PropsType, StateType> {
CameraManager.stopRecording(this._cameraHandle);
}
pauseRecording() {
CameraManager.pauseRecording(this._cameraHandle);
}
resumeRecording() {
CameraManager.resumeRecording(this._cameraHandle);
}
pausePreview() {
CameraManager.pausePreview(this._cameraHandle);
}