2012-04-30 68 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建議您播放另一個聲音來代替快門聲音,但是您沒有義務。

相關問題