diff --git a/android/src/main/java/org/reactnative/camera/CameraViewManager.java b/android/src/main/java/org/reactnative/camera/CameraViewManager.java index fd2da1b..7dfbf7e 100644 --- a/android/src/main/java/org/reactnative/camera/CameraViewManager.java +++ b/android/src/main/java/org/reactnative/camera/CameraViewManager.java @@ -120,6 +120,11 @@ public class CameraViewManager extends ViewGroupManager { view.setUsingCamera2Api(useCamera2Api); } + @ReactProp(name = "playSoundOnCapture") + public void setPlaySoundOnCapture(RNCameraView view, boolean playSoundOnCapture) { + view.setPlaySoundOnCapture(playSoundOnCapture); + } + @ReactProp(name = "faceDetectorEnabled") public void setFaceDetecting(RNCameraView view, boolean faceDetectorEnabled) { view.setShouldDetectFaces(faceDetectorEnabled); diff --git a/android/src/main/java/org/reactnative/camera/RNCameraView.java b/android/src/main/java/org/reactnative/camera/RNCameraView.java index 4a80d48..90bccf9 100644 --- a/android/src/main/java/org/reactnative/camera/RNCameraView.java +++ b/android/src/main/java/org/reactnative/camera/RNCameraView.java @@ -4,6 +4,7 @@ import android.Manifest; import android.content.pm.PackageManager; import android.graphics.Color; import android.media.CamcorderProfile; +import android.media.MediaActionSound; import android.os.Build; import android.support.v4.content.ContextCompat; import android.util.SparseArray; @@ -54,6 +55,7 @@ public class RNCameraView extends CameraView implements LifecycleEventListener, private Map mPictureTakenDirectories = new ConcurrentHashMap<>(); private Promise mVideoRecordedPromise; private List mBarCodeTypes = null; + private Boolean mPlaySoundOnCapture = false; private boolean mIsPaused = false; private boolean mIsNew = true; @@ -201,10 +203,18 @@ public class RNCameraView extends CameraView implements LifecycleEventListener, initBarcodeReader(); } + public void setPlaySoundOnCapture(Boolean playSoundOnCapture) { + mPlaySoundOnCapture = playSoundOnCapture; + } + public void takePicture(ReadableMap options, final Promise promise, File cacheDirectory) { mPictureTakenPromises.add(promise); mPictureTakenOptions.put(promise, options); mPictureTakenDirectories.put(promise, cacheDirectory); + if (mPlaySoundOnCapture) { + MediaActionSound sound = new MediaActionSound(); + sound.play(MediaActionSound.SHUTTER_CLICK); + } super.takePicture(); } diff --git a/src/RNCamera.js b/src/RNCamera.js index 62d9d44..283f348 100644 --- a/src/RNCamera.js +++ b/src/RNCamera.js @@ -77,6 +77,7 @@ type PropsType = ViewPropTypes & { onTextRecognized?: ({ textBlocks: Array }) => void, captureAudio?: boolean, useCamera2Api?: boolean, + playSoundOnCapture?: boolean, }; const CameraManager: Object = NativeModules.RNCameraManager || @@ -154,6 +155,7 @@ export default class Camera extends React.Component { pendingAuthorizationView: PropTypes.element, captureAudio: PropTypes.bool, useCamera2Api: PropTypes.bool, + playSoundOnCapture: PropTypes.bool, }; static defaultProps: Object = { @@ -201,6 +203,7 @@ export default class Camera extends React.Component { ), captureAudio: false, useCamera2Api: false, + playSoundOnCapture: false, }; _cameraRef: ?Object;