如何在Android上播放原生相机声音

Hus*_*pit 25 camera android

我想在相机预览捕捉上播放原生相机快门声音片段.我指的takePicture()是调用时播放的声音片段.
我怎么能这样?有人可以带我走过这些台阶吗?

Mil*_*ský 55

您可以使用MediaActionSound类(可从API 16获得).例如:

MediaActionSound sound = new MediaActionSound();
sound.play(MediaActionSound.SHUTTER_CLICK);
Run Code Online (Sandbox Code Playgroud)

  • 这种方法没有量?无论设备上设置了多少音量,这都会使快门声音达到最大音量. (4认同)
  • 它应该自动尊重用户当前的通知音量。 (2认同)

Ale*_*ohn 19

如果系统文件在那里,您可以像这样使用它:

public void shootSound()
{
    AudioManager meng = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
    int volume = meng.getStreamVolume( AudioManager.STREAM_NOTIFICATION);

    if (volume != 0)
    {
        if (_shootMP == null)
            _shootMP = MediaPlayer.create(getContext(), Uri.parse("file:///system/media/audio/ui/camera_click.ogg"));
        if (_shootMP != null)
            _shootMP.start();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 在代码的开头添加:MediaPlayer _shootMP = null; (5认同)
  • @Derzu:在我的案例中,`_sootMP`是相机Activity的一个类成员.没有必要为每次捕获重新创建它. (2认同)

小智 9

您可能想要使用SoundPool

SoundPool soundPool = new SoundPool(1, AudioManager.STREAM_NOTIFICATION, 0);
int shutterSound = soundPool.load(this, R.raw.camera_click, 0);
Run Code Online (Sandbox Code Playgroud)

然后播放声音

soundPool.play(shutterSound, 1f, 1f, 0, 0, 1);
Run Code Online (Sandbox Code Playgroud)

查看http://developer.android.com/reference/android/media/SoundPool.html以了解参数.

您需要在res/raw的项目中使用名为camera_click.ogg的媒体文件.如果您的项目是在Apache许可下获得许可,您应该能够使用Android默认声音,该声音可以从以下位置(frameworks/base/data/sounds/effects/camera_click.ogg)中的Android开源项目获得.如果您的项目未获得Apache许可证的许可,我不知道您是否可以使用它.我不是律师.


Jim*_*ler 3

此资源解释了如何播放音频文件: https://developer.android.com/guide/topics/media/index.html

您可能必须提供自己的快门声音效果。