2012-04-30 70 views
19

有没有什么办法可以在Android(无根手机)中静音相机快门声音?如何在Android手机上静音相机快门声音

我使用此代码拍照时,我的静音音频声音:

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上测试它时,它不起作用。还有其他解决方法吗?

+0

看到这个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-更改默认的快门声功能于Android的 http://stackoverflow.com/questions/9106939/android-camera-takepicture-possible-to-disable-shutter-sound-and-preview-surfa –

+1

难道你尝试设置快门回调为空?你怎么拍这张照片? – styler1972

回答

2

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

1

我可以想到的一个疯狂的方式是获得静音手机的权限。

+0

如何做到这一点?我已经让手机保持沉默,但仍然无法工作。 – user430926

3

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

+0

我在韩国找到了[需要快门声音的参考资料](https://www.privacyinternational.org/reports/south-korea/ii-surveillance-policy),但没有提及美国。你能否指出我在美国解释这种法律地位的文件? AFAICT [这个提案](http://www.govtrack.us/congress/bills/111/hr414)从未通过。 – cberzan

7

试试这个代码:

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的已知问题..

+0

这对我来说不起作用2.3.3 – wired00

+0

它适用于2.3.3,但在调用takePicture()和在ShutterCallback.onShutter() –

+1

中取消静音之前,您需要先进行静音调用什么是muteMode? –

5

由于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.

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

相关问题