android开发(44) 使用了 SoundPool 播放提示音
2015-09-18 18:18
495 查看
SoundPool
一个声音播放的辅助类,从名字可以看出,它具有 “池”的能力,它先加载声音文件到内存,以支持多次播放声音文件。特点
SoundPool适合 短小的 声音文件SoundPool适合播放 “需要多次播放的提示音”,比如在 一些常用的 请登录,请点击什么的
相比mediaPlayer,耗用资源更少
支持 同时 播放多个声音
使用方法
创建实例
mSoundPool = new SoundPool(1, AudioManager.STREAM_ALARM, 0);
soundPoolMap = new HashMap<Integer, Integer>(); //这里我创建一个 hash 表,用于记录加载过的声音的ID,一般我们会定义一个常量作为检索该声音的KEY
加载声音文件
soundPoolMap.put(KEY_SOUND_A1, mSoundPool.load(this, R.raw.a1, 1)); soundPoolMap.put(KEY_SOUND_A2, mSoundPool.load(this, R.raw.a2, 1));//注意,这里 hash表里 记录
播放声音文件
mSoundPool.play(soundPoolMap.get(KEY_SOUND_A1), 1, 1, 0, 0, 1); //注意,这里从hash表里取出了具体的ID
注册一个监听器,在加载声音完毕的时候获得消息
mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() { @Override public void onLoadComplete(SoundPool soundPool, int sampleId, int status) { alert(" " + sampleId); } });
最后,是完整的类的代码,示例代码可以在我的github上下载:https://github.com/vir56k/demo/tree/master/SoundPoolDemo
package demo.vir56k.soundpooldemo;
import android.media.AudioManager;
import android.media.SoundPool;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import java.util.HashMap;
public class MainActivity extends AppCompatActivity {
public static final int KEY_SOUND_A1 = 1;
public static final int KEY_SOUND_A2 = 1;
SoundPool mSoundPool;
private HashMap<Integer, Integer> soundPoolMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSoundPool = new SoundPool(1, AudioManager.STREAM_ALARM, 0);
mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() { @Override public void onLoadComplete(SoundPool soundPool, int sampleId, int status) { alert(" " + sampleId); } });
soundPoolMap = new HashMap<Integer, Integer>();
soundPoolMap.put(KEY_SOUND_A1, mSoundPool.load(this, R.raw.a1, 1));
soundPoolMap.put(KEY_SOUND_A2, mSoundPool.load(this, R.raw.a2, 1));
}
private void alert(String s) {
Log.i("Alert: ", s + "");
}
public void onClickView(View view) {
if (view.getId() == R.id.button) {
mSoundPool.play(soundPoolMap.get(KEY_SOUND_A1), 1, 1, 0, 0, 1);
}
if (view.getId() == R.id.button2) {
mSoundPool.play(soundPoolMap.get(KEY_SOUND_A2), 1, 1, 0, 0, 1);
}
}
}
相关文章推荐
- Android 手机相册图片选择
- android 文件夹
- Android之实现妙趣横生的粘连布局
- android 滑动分页
- android ant 打包报错: [aapt] invalid resource directory name:
- Android四舍五入保留两位小数
- android小游戏“24点”放源码了!!
- Android高手进阶:Adapter深入理解与优化
- Android 流式布局
- Android mediaplayer Couldn't open file on client side, trying server side
- android - AsyncTask 异步操作
- Android M 新的运行时权限开发者需要知道的一切
- (调用百度地图)连续的进入地图然后又退出地图,抛出一个很奇怪的空指针
- Android-多线程下载
- [android]service中启activity
- android中设置默认语言、默认时区
- android 五子棋之小白java
- android源码开发之监听来电状态
- Android TextView 字体描边效果代码
- 【Android】onActivityResult()和onResume()的调用顺序问题