【问题标题】:How do I change default shutter sound in Android?如何更改 Android 中的默认快门声音?
【发布时间】:2012-01-18 07:59:39
【问题描述】:

有什么办法可以替换安卓中的相机快门声音吗?我想用代码中的其他内容替换快门声音,即相机在拍照时发出的声音。

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

AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
mgr.setStreamMute(AudioManager.STREAM_SYSTEM, true);

我希望将声音替换为另一个可由用户动态设置的.mp3.ogg

我知道如果您有一个已root的手机,您可以替换该文件。这不是我的应用的解决方案。

【问题讨论】:

    标签: android audio android-camera


    【解决方案1】:

    声音是从任何设备的本机层 (libcameraservice.so) 中的摄像头服务播放的。因此,播放声音的任何修改都必须在这里完成。

    事后看来:

    上述库中的声音播放部分是设备相机快门回调的结果。这会检查音量索引,因此当您将设备设置为静音时不会播放任何声音。当事件稍后传输到应用层时,您的 Camera.ShutterCallback 实现(请参阅http://developer.android.com/reference/android/hardware/Camera.html#takePicture(android.hardware.Camera.ShutterCallback、android.hardware.Camera.PictureCallback、android.hardware.Camera.PictureCallback、android.hardware.Camera.PictureCallback)被调用并因此,这里可以取消音频管理器的静音并使用 Android 音频播放类(如音轨)播放您的音频文件。

    【讨论】:

    • 所以解决方法是在ShutterCallback上设置设备静音,在其他回调函数中取消静音,然后播放其他声音?
    • 在调用 takePicture 调用之前将设备设置为静音,并在 OnShutterCallback 中取消静音。这将使内部声音静音,但您可以在取消静音后播放您的声音。
    • 在调用 camera.takePicture(shutterCallback, rawCallback,jpegCallback);静音设备 AudioManager.STREAM_SYSTEM。并在快门回调方法中取消静音并从 Raw 文件夹播放我的声音文件,但有时它会播放系统文件以及我的文件。如何处理?
    • 你有时是什么意思?您是否随时只能听到您的捕获音?
    • 我在 MediaRecorder 的启动/停止声音中看到了这种行为。我的怀疑是取消静音发生得太早,即在播放声音之前流被取消静音(可能是由于排队)。我采用的解决方法是在 0.5 秒延迟后执行取消静音呼叫(这在我的 Nexus 4 上起到了作用)。不理想,但它有效。请注意,这将解释@Deepak 提到的“有时”,因为有时静音会在播放声音之前发生,有时会在播放之后发生(我猜)。
    猜你喜欢
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多