美文网首页我爱编程
Android 铃声播放

Android 铃声播放

作者: AndroidXing | 来源:发表于2018-05-27 22:16 被阅读32次

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

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

    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<Integer, Integer> 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;
        }
    }
    

    相关文章

      网友评论

        本文标题:Android 铃声播放

        本文链接:https://www.haomeiwen.com/subject/ccqshftx.html