android實現(xiàn)小音頻頻繁播放
android中多媒體文件(音樂和視頻)的播放是用MediaPlayer方式是大家比較熟悉的,但是現(xiàn)在要來說一下另外一種音樂文件播放的方式SoundPool,相比較而言,用MediaPlayer來播放音樂的話,占用的系統(tǒng)資源是很多的,加載資源也需要時間,所以它不適合用來頻繁播放小音頻文件,比如控件焦點、點擊時需要播放小音頻文件,這個時候用SoundPool來播放音頻文件,比用MediaPlayer來播放效率要高很多。這里也來說說,如果用MediaPlayer來播放小音頻文件的話,會出現(xiàn)延時,點擊了之后等會兒才出現(xiàn)聲音。所以,SoundPool比MediaPlayer更輕量級,適合用于頻繁播放的小音頻文件。
下面就來說說它的用法:
第一步:放置目標音頻文件
將音頻文件放在res/raw目錄下,這樣就可以通過R來引用它了。如果想放在Assert目錄下也是可以的,這里先放在raw下。
第二步:編寫音頻播放的類
public class MusicPlayer {
private Context mContext ;
private static MusicPlayer sInstance ;
static class Type{
public final static int MUSIC_CLICK = 1 ;
public final static int MUSIC_FOCUSED = 2 ;
}
private SoundPool mSp ;
private Map<integer ,integer=""> sSpMap ;
private MusicPlayer(Context context){
mContext = context ;
sSpMap = new TreeMap<integer ,integer="">() ;
mSp = new SoundPool(10 ,AudioManager.STREAM_MUSIC ,100) ;
sSpMap.put(Type.MUSIC_CLICK, mSp.load(mContext, R.raw.click, 1)) ;
sSpMap.put(Type.MUSIC_FOCUSED, mSp.load(mContext, R.raw.focused, 1)) ;
}
public static MusicPlayer getInstance(Context context){
if(sInstance == null)
sInstance = new MusicPlayer(context) ;
return sInstance ;
}
public void play(int type){
if(sSpMap.get(type) == null) return ;
mSp.play(sSpMap.get(type), 1, 1, 0, 0, 1) ;
}
}
第三步:調(diào)用接口,播放音頻
// 在界面上需要這樣調(diào)用 // 初始化 mMusic = MusicPlayer.getInstance(MainActivity.this) ; // 在onClick中播放click時的聲音 mMusic.play(MusicPlayer.Type.MUSIC_CLICK) ; // 在onFocusChange中聚焦狀態(tài)播放聚焦的聲音 mMusic.play(MusicPlayer.Type.MUSIC_FOCUSED) ;
如果想放在Assert中的話,要注意在引用音頻文件時要用AssetFileDescriptor,具體方式如下:
MediaPlayer mMediaPlayer = new MediaPlayer() ;
AssetFileDescriptor fd = mContext.getAssets().openFd(“music/click.pm3”) ; // assert目錄下的music目錄
mMediaPlayer.setDataSource(fd.getFileDescriptor() ,fd.getStartOffset() ,fd.getLength()) ;
mMediaPlayer.prepare() ;
mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer arg0) {
mMediaPlayer.release() ;
}
}) ;
mMediaPlayer.setOnErrorListener(new OnErrorListener() {
@Override
public boolean onError(MediaPlayer arg0, int arg1, int arg2) {
mMediaPlayer.release() ;
return false;
}
}) ;
mMediaPlayer.start() ;
注意:在用MediaPlayer時要記住釋放資源!在兩個回調(diào)接口中實現(xiàn)。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Android自定義view實現(xiàn)側(cè)滑欄詳解
之前一直沒有寫側(cè)滑菜單的實現(xiàn)方法,今天計劃補上。手機開發(fā)中,往往存在很多功能沒處放的問題。我們可能會把功能放入一個菜單列表,但現(xiàn)在一種流行的做法是側(cè)滑菜單2022-11-11
Android實現(xiàn)獲取聯(lián)系人電話號碼功能
這篇文章主要為大家詳細介紹了Android實現(xiàn)獲取聯(lián)系人電話號碼功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03
Andoroid實現(xiàn)底部圖片選擇Dialog效果
這篇文章主要介紹了Andoroid實現(xiàn)底部圖片選擇Dialog效果,需要的朋友可以參考下2017-10-10

