android 提示音播放

我封装了一个简单的提示音播放控件
代码:

import android.content.Context;
import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.SoundPool;

/**
 * 播放简短的提示音
 * 使用时注意的问题:加载资源需要时间,所以要先预加载再使用。
 * 先在初始化生命周期onCreate()时调用setSoundID();然后在播放时调用play()
 * 否则,会听不到声音!
 * <p>
 * 参考示例:
 * <p>
 * Sound sound;
 * <p>
 * onCreate()中
 * onCreate(Bundle savedInstanceState){
 * super.onCreate(savedInstanceState);
 * <p>
 * sound = new Sound(this).build();
 * sound.setSoundResource(R.raw.pop);
 * }
 * <p>
 * onClick()中
 * button.setOnClickListener(v -> {
 * sound.play();
 * });
 */
public class Sound {

    SoundPool.Builder builder;
    SoundPool soundPool;
    int soundID;
    Context mContext;

    public Sound(Context mContext) {
        this.mContext = mContext;
    }

    public Sound build() {
        if (builder == null) {
            builder = new SoundPool.Builder();
            //传入最多播放音频数量,
            builder.setMaxStreams(1);
            //AudioAttributes是一个封装音频各种属性的方法
            AudioAttributes.Builder attrBuilder = new AudioAttributes.Builder();
            //设置音频流的合适的属性
            attrBuilder.setLegacyStreamType(AudioManager.STREAM_ALARM);
            //加载一个AudioAttributes
            builder.setAudioAttributes(attrBuilder.build());
            soundPool = builder.build();
        }
        return this;
    }

    public void setSoundResource(int soundID) {
        if (soundPool == null) throw new RuntimeException("请先调用build()方法");
        this.soundID = soundPool.load(mContext, soundID, 1);
    }

    public Sound play() {
        if (soundID == 0) throw new RuntimeException("请先调用setSoundID()方法");
        if (soundPool != null) {
            soundPool.play(soundID, 0.2f, 0.2f, 1, 0, 1);
        }
        return this;
    }

    public Sound release() {
        if (soundPool != null) {
            soundPool.release();
        }
        return this;
    }

    public Sound stop() {
        if (soundPool != null) {
            soundPool.stop(soundID);
        }
        return this;
    }

    public Sound setOnLoadCompleteListener(SoundPool.OnLoadCompleteListener onLoadCompleteListener) {
        soundPool.setOnLoadCompleteListener(onLoadCompleteListener);
        return this;
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值