Android 播放自定义铃声

本文介绍了Android播放声音的两种方式,即SoundPool和MediaPlayer,前者适合播放反映速度要求高的声效,后者适合播放长时间声效。还说明了将自定义音效文件放到res/raw文件夹下,给出了添加音效、播放音效的代码实现,以及用switch控件控制声音开关的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

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

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

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

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

然后实现添加音效:

    public MediaPlayer mPlayer;
    private SoundPool mSound;
    private HashMap<Integer, Integer> 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<Integer, Integer>();
        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

 

 希望能帮助到别人。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值