有没有办法在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
上对其进行测试时,它无效。还有其他工作吗?
答案 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)
我能想到的一种疯狂方式是获得手机静音的许可。