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。但是当我在 and 上测试它时Samsung Tab p1000Sony Experia R800i它不起作用。还有其他解决方法吗?

4

5 回答 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 以下版本存在一个已知问题。

于 2012-05-23T17:10:21.913 回答
7

从 API 级别 17 (4.2) 开始,如果手机制造商支持,就有一种适当、可靠的方法来执行此操作。

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

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

您需要在对 的调用中将 id 设置为适当的相机 ID Camera.getCameraInfo,或者在从 0 到Camera.getNumberOfCameras()- 1 的循环中将它们全部禁用。

开发人员文档建议您播放另一种声音来代替快门声音,但您没有义务这样做。

于 2013-01-03T14:42:57.157 回答
4

您已经发布的方法实际上是我能找到/想到的最好的方法。它不起作用的原因是因为它不应该起作用。事实上,在许多地方(欧洲大部分地区、日本、美国部分地区等)禁用快门声音是非法的。这样你就不能在你不应该去的地方拍照,所以你不能在没有人允许的情况下拍照,等等。制造商故意试图确保您无论如何都无法做到这一点只是在黑暗中拍摄(尽管从技术上讲总有办法),但是当您考虑它时,从逻辑上讲,您的代码没有理由不应该这样做工作对吗?这很简单,基本,有道理。无论如何,

于 2012-05-16T14:50:26.637 回答
3

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

于 2012-05-13T21:32:31.343 回答
2

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

于 2012-05-14T21:12:39.120 回答