summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/hardware/Camera.java25
-rw-r--r--core/jni/android_hardware_Camera.cpp22
2 files changed, 47 insertions, 0 deletions
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index 829620b46059..652356c02c37 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -1146,6 +1146,31 @@ public class Camera {
public native final void setDisplayOrientation(int degrees);
/**
+ * Enable or disable the default shutter sound when taking a picture.
+ *
+ * By default, the camera plays the system-defined camera shutter sound when
+ * {@link #takePicture} is called. Using this method, the shutter sound can
+ * be disabled. It is strongly recommended that an alternative shutter sound
+ * is played in the {@link ShutterCallback} when the system shutter sound is
+ * disabled.
+ *
+ * Note that devices may not always allow control of the camera shutter
+ * sound. If the shutter sound cannot be controlled, this method will return
+ * false.
+ *
+ * @param enabled whether the camera should play the system shutter sound
+ * when {@link #takePicture takePicture} is called.
+ * @return true if the shutter sound state was successfully changed. False
+ * if the shutter sound cannot be controlled; in this case, the
+ * application should not play its own shutter sound since the
+ * system shutter sound will play when a picture is taken.
+ * @see #takePicture
+ * @see ShutterCallback
+ * @hide
+ */
+ public native final boolean enableShutterSound(boolean enabled);
+
+ /**
* Callback interface for zoom changes during a smooth zoom operation.
*
* @see #setZoomChangeListener(OnZoomChangeListener)
diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp
index 6cd8955d366b..e1e97a19cf0f 100644
--- a/core/jni/android_hardware_Camera.cpp
+++ b/core/jni/android_hardware_Camera.cpp
@@ -781,6 +781,25 @@ static void android_hardware_Camera_setDisplayOrientation(JNIEnv *env, jobject t
}
}
+static jboolean android_hardware_Camera_enableShutterSound(JNIEnv *env, jobject thiz,
+ jboolean enabled)
+{
+ ALOGV("enableShutterSound");
+ sp<Camera> camera = get_native_camera(env, thiz, NULL);
+ if (camera == 0) return JNI_FALSE;
+
+ int32_t value = (enabled == JNI_TRUE) ? 1 : 0;
+ status_t rc = camera->sendCommand(CAMERA_CMD_ENABLE_SHUTTER_SOUND, value, 0);
+ if (rc == NO_ERROR) {
+ return JNI_TRUE;
+ } else if (rc == PERMISSION_DENIED) {
+ return JNI_FALSE;
+ } else {
+ jniThrowRuntimeException(env, "enable shutter sound failed");
+ return JNI_FALSE;
+ }
+}
+
static void android_hardware_Camera_startFaceDetection(JNIEnv *env, jobject thiz,
jint type)
{
@@ -890,6 +909,9 @@ static JNINativeMethod camMethods[] = {
{ "setDisplayOrientation",
"(I)V",
(void *)android_hardware_Camera_setDisplayOrientation },
+ { "enableShutterSound",
+ "(Z)Z",
+ (void *)android_hardware_Camera_enableShutterSound },
{ "_startFaceDetection",
"(I)V",
(void *)android_hardware_Camera_startFaceDetection },