android p官方铃声,Android 铃声播放

之前做了关于视频通话的应用,有一块功能是铃声的播放,遇到了一些坑。

这里封装了一个工具类,代码如下:

import android.content.Context;

import android.media.AudioManager;

import android.media.SoundPool;

import android.util.Log;

import java.util.HashMap;

public class MediaSoundUtil {

private static final int KEY_RING = 1;

private static final int KEY_REJECT = 2;

private static final String TAG = MediaSoundUtil.class.getSimpleName();

private static volatile MediaSoundUtil sSoundPoolUtil;

private final Context mContext;

private final SoundPool mSoundPool;

private final HashMap mSoundMap;

private int mCurrentId;

//声音资源加载完成的标识位

private boolean mHasLoaded;

private MediaSoundUtil(Context context) {

mContext = context.getApplicationContext();

mSoundPool = new SoundPool(2, AudioManager.STREAM_VOICE_CALL,0);

mSoundMap = new HashMap<>();

mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {

@Override

public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {

Log.i(TAG,"onLoadComplete "+sampleId+"staus "+status);

mHasLoaded = true;

}

});

mSoundMap.put(KEY_RING,mSoundPool.load(mContext, R.raw.ring,1));

mSoundMap.put(KEY_REJECT,mSoundPool.load(mContext,R.raw.reject,1));

Log.i(TAG,"MediaSoundUtil init map = "+mSoundMap);

}

public static MediaSoundUtil getInstance(Context context) {

if (sSoundPoolUtil == null) {

synchronized (MediaSoundUtil.class) {

if (sSoundPoolUtil == null) {

sSoundPoolUtil = new MediaSoundUtil(context);

}

}

}

return sSoundPoolUtil;

}

public void playRingSound() {

stopPlay();

Log.i(TAG, "playRingSound " + mCurrentId+",hasload "+mHasLoaded);

if (!mHasLoaded) {

mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {

@Override

public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {

if (sampleId == mSoundMap.get(KEY_RING)) {

playSoundId(mSoundMap.get(KEY_RING), true);

}

Log.i(TAG, "playRingSound onLoadComplete " + sampleId + "staus " + status);

mHasLoaded = true;

}

});

} else {

playSoundId(mSoundMap.get(KEY_RING), true);

}

}

public void playRejectSound(){

stopPlay();

Log.i(TAG,"playRejectSound "+mCurrentId+",hasload "+mHasLoaded);

if(!mHasLoaded){

mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {

@Override

public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {

if (sampleId == mSoundMap.get(KEY_REJECT)) {

playSoundId(mSoundMap.get(KEY_REJECT), false);

}

Log.i(TAG, "playRejectSound onLoadComplete " + sampleId + "staus " + status);

mHasLoaded = true;

}

});

}else{

playSoundId(mSoundMap.get(KEY_REJECT),false);

}

}

public void stopPlay() {

Log.i(TAG,"stopPlay "+mCurrentId);

if (mCurrentId != 0) {

mSoundPool.stop(mCurrentId);

}

}

private int playSoundId(int sampleId,boolean isLoop) {

mCurrentId = mSoundPool.play(sampleId, 1f, 1f, 1, isLoop ? -1 : 0, 1);

Log.i(TAG,"playSoundId = "+mCurrentId);

return mCurrentId;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值