Android 播放自定义铃声

参考链接:https://www.cnblogs.com/alwaysfirst/p/4004838.html

 

android播放声音,一种是soundPool,一种是mediaplayer

soundpool 适合播放反映速度要求较高的声效,比如,游戏中的爆炸音效

mediaplay 适合播放时间比较长的声效,比如,游戏中的背景音乐

将自定义的音效文件放到res/raw文件夹下,如果不存在raw目录,创建一个

然后实现添加音效:

    public MediaPlayer mPlayer;
    private SoundPool mSound;
    private HashMap soundPoolMap;

    public static Boolean isRingTone = false;

/**
     * 初始化声音
     */
    private void InitSounds() {
        // 设置播放音效
        mPlayer = MediaPlayer.create(getActivity(), R.raw.jb1);    //getActivity()也可以是MainActivity.this
        // 第一个参数为同时播放数据流的最大个数,第二数据流类型,第三为声音质量
        mSound = new SoundPool(4, AudioManager.STREAM_MUSIC, 100);
        soundPoolMap = new HashMap();
        soundPoolMap.put(1, mSound.load(getActivity(), R.raw.jb2, 1));
        //可以在后面继续put音效文件
    }

    /**
     * soundPool播放
     * 
     * @param sound
     *            播放第一个
     * @param loop
     *            是否循环
     */
    private void PlaySound(int sound, int loop) {
        AudioManager mgr = (AudioManager) getActivity()
                .getSystemService(Context.AUDIO_SERVICE);
        // 获取系统声音的当前音量
        float currentVolume = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
        // 获取系统声音的最大音量
        float maxVolume = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        // 获取当前音量的百分比
        float volume = currentVolume / maxVolume;

        // 第一个参数是声效ID,第二个是左声道音量,第三个是右声道音量,第四个是流的优先级,最低为0,第五个是是否循环播放,第六个播放速度(1.0 =正常播放,范围0.5 - 2.0)
        mSound.play(soundPoolMap.get(sound), volume, volume, 1, loop, 1f);
    }

 然后调用方法就可以了,我自己是添加了switch控件,来控制是否开启。

sw_bj.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                  if (isChecked){
                      isRingTone = true;
                    }else {
                        if(isRingTone)
                        {
                            isRingTone = false;
                            mPlayer.pause();     
                        }
                    }
            }
        });

 在需要的地方调用

 if(MeFragment.isRingTone)  //MeFragment 是类名
    {
         MeFragment.mPlayer.start(); //在别的类调用需要定义mplayer为静态变量
     }




PlaySound(1, 0);  // 开启SoundPool 
 mSound.pause(1); // 关闭SoundPool 
 mPlayer.start(); //开启MediaPlayer
 mPlayer.pause(); //关闭MediaPlayer

 

 希望能帮助到别人。

 

你可能感兴趣的:(Android)