如何在Android手机上静音相机快门声音

时间:2012-04-30 11:39:45

标签: android audio android-camera

有没有办法在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 p1000Sony Experia R800i上对其进行测试时,它无效。还有其他工作吗?

5 个答案:

答案 0 :(得分: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()方法,因为在版本2.3以下的android上有一个已知问题..

答案 1 :(得分:6)

自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的循环中将其全部禁用。

developer documentation建议您播放另一种声音代替快门声,但您没有义务。

答案 2 :(得分:4)

您已发布的方法实际上是我能找到/想到的最佳方法。它不起作用的原因是因为它不应该。事实上,在许多地方(欧洲大部分地区,日本,美国部分地区等),禁用快门声音是违法的。这样你就不能在你不应该去的地方拍照,所以你不要在没有他们许可的情况下拍照,等等。这只是一个黑暗的镜头,制造商故意试图确保你无论如何都不能这样做(虽然从技术上总是有办法),但是当你想到它时,逻辑上没有理由你的代码不应该工作对吗?这很简单,基本,有道理。无论如何,那里有许多静音相机应用程序,而Camera + ICS实际上是在默认的ICS相机上构建的,但它具有静音快门选项,所以它必须是可能的。

答案 3 :(得分:3)

有一部手机可以自己播放快门声。在这种情况下,似乎无法禁用快门声。

答案 4 :(得分:2)

我能想到的一种疯狂方式是获得手机静音的许可。