如何在Android中更改默认快门声音?

如何在Android中更改默认快门声音?,android,audio,android-camera,Android,Audio,Android Camera,有没有办法取代Android中的相机快门声音?我想用代码中的其他东西来替换快门声音,相机在拍照时发出的声音 我在拍照前使用此代码使手机静音,并在拍照后立即解除静音: AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE); mgr.setStreamMute(AudioManager.STREAM_SYSTEM, true); 我更喜欢用另一个可以由用户动态设置的.mp3或.ogg替换声音 我知道如果你有

有没有办法取代Android中的相机快门声音?我想用代码中的其他东西来替换快门声音,相机在拍照时发出的声音

我在拍照前使用此代码使手机静音,并在拍照后立即解除静音:

AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
mgr.setStreamMute(AudioManager.STREAM_SYSTEM, true);
我更喜欢用另一个可以由用户动态设置的
.mp3
.ogg
替换声音


我知道如果你有根手机,你可以替换文件。这不是我的应用程序的解决方案。

声音是从任何设备的本机层(libcameraservice.so)中的cameraservice播放的。因此,必须在这里对播放的声音进行任何修改

事后看来:


上述库中的声音播放部分是来自设备摄像头的快门回调的结果。这会检查音量索引,因此在将设备设置为静音时不会播放任何声音。当事件稍后传输到应用层时,您的Camera.ShutterCallback实现(请参阅,android.hardware.Camera.PictureCallback,android.hardware.Camera.PictureCallback,android.hardware.Camera.PictureCallback)调用,因此可以在此处取消音频管理器的静音,并使用Android audio playback类(如audio track)播放您的音频文件。

因此,解决方案是将设备设置为在ShutterCallback上静音,在other callback Function中取消e静音,然后播放其他声音?在调用takePicture call之前将设备设置为静音,然后取消静音在OnShutterCallback中。这将使内部声音静音,但您可以在取消静音后重新播放自己的声音。我在调用camera.takePicture(shutterCallback、rawCallback、jpegCallback)之前的应用程序中执行了此操作;静音设备AudioManager.STREAM\u系统。在快门回调方法中取消静音,从原始文件夹播放我的声音文件,但有时它会播放系统文件和我的文件。怎么处理?你有时是什么意思?您在任何时候都只能听到您的捕获时间吗?我在MediaRecorder的启动/停止声音中见过这种行为。我的怀疑是,取消静音发生得太早,即在播放声音之前流被取消静音(可能是由于排队)。我采取的解决办法是在0.5秒延迟后执行unmute调用(这在我的Nexus4上起了作用)。虽然不理想,但效果很好。请注意,这可以解释@Deepak提到的“有时”,因为有时静音会在声音播放之前发生,有时在声音播放之后发生(我猜是这样)。