如何在安卓手机上关闭相机快门声音

21

有没有办法在Android上(未root的手机)静音相机快门声音?

我使用以下代码来在拍照时静音我的音频声音:

  AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
    int streamType = AudioManager.STREAM_SYSTEM;
    mgr.setStreamSolo(streamType, true);
    mgr.setRingerMode(AudioManager.RINGER_MODE_SILENT);
    mgr.setStreamMute(streamType, true);

我将声音调至静音并将手机设为静音模式。

mCamera.takePicture(null, null, photoCallback); 

然后拍照。

它在HTC HERO、HTC Desire、Motorola ME860和MotoA953上可以运行。但是当我在Samsung Tab p1000和Sony Experia R800i上测试时,它不能正常工作。是否有其他解决方法?


请查看此链接:http://wiki.dandascalescu.com/howtos/android#How_do_I_disable_the_camera_shutter_sound.3F - MAC
3
请跟随以下两个链接:http://stackoverflow.com/questions/8906909/how-do-i-change-default-shutter-sound-in-androidhttp://stackoverflow.com/questions/9106939/android-camera-takepicture-possible-to-disable-shutter-sound-and-preview-surfa - Krishnakant Dalal
1
你尝试将快门回调设置为null了吗?你是如何拍照的? - Tyler
mCamera.takePicture(Camera.ShutterCallback shutter, Camera.PictureCallback raw, Camera.PictureCallback jpeg)mCamera.takePicture(null, null, photoCallback);我将快门回调设置为null。 - user430926
5个回答

8

试试这段代码:

AudioManager manager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
if(TextUtils.equals(muteMode, "mute")){
    manager.setStreamVolume(AudioManager.STREAM_SYSTEM, 0 , AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
}else{
    manager.setStreamVolume(AudioManager.STREAM_SYSTEM, manager.getStreamMaxVolume(AudioManager.STREAM_SYSTEM) , AudioManager.FLAG_ALLOW_RINGER_MODES);
}
//here continue to take picture...

不要使用AudioManager.setStreamMute()方法,因为在Android 2.3以下版本中存在已知问题。


它可以在2.3.3版本上运行,但是在调用takePicture()之前需要进行静音呼叫,并在ShutterCallback.onShutter()中取消静音。 - Miron Ophir

7

从API 17(4.2)开始,如果手机厂商支持,就有一种正确、可靠的方法来完成此操作。

首先,检测是否可以通过程序禁用快门声音,然后禁用它。

Camera.CameraInfo info = new Camera.CameraInfo();
Camera.getCameraInfo(id, info);
if (info.canDisableShutterSound) {
    mCamera.enableShutterSound(false)
}

在调用Camera.getCameraInfo时,您需要将id设置为相应的摄像头id,或者在0到Camera.getNumberOfCameras()-1的循环中禁用所有摄像头。

开发者文档建议您播放其他声音来替代快门声音,但这并非强制要求。


4
您已经发布的方法实际上是我能找到/想到的最好的方法。它不起作用的原因是因为它不应该起作用。事实上,在许多地方(大部分欧洲,日本,美国的某些地区等),禁止关闭快门声音是非法的。这是为了防止您在不应该拍摄照片的地方拍照,以及您未经他们允许就拍摄别人的照片等。制造商已经有意尝试确保您无论如何都不能做到这一点(虽然从技术上讲总有办法),但是当您考虑一下,逻辑上没有理由您的代码不应该起作用,对吗?它很简单,基础,有道理。总之,有许多无声相机应用程序,而Camera+ ICS实际上是建立在默认的ICS相机上的,但具有静音快门选项,因此必须是可能的。

我在韩国找到了关于快门声音必须的参考资料,但是在美国没有找到任何相关信息。你能否指引我一份文件来解释在美国这方面的法律地位?据我所知,这个提议的法案从未通过。 - cberzan

3

有些手机会自动播放快门声。在这种情况下,似乎无法禁用快门声。


2

我能想到的一个疯狂的方法是获取静音手机的权限。


如何解决?我已经将手机设为静音,但仍然不起作用。 - user430926

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接