我給大家分享一個我寫的一個簡單的音樂播放的功能 說起音樂播放器就會想到MediaPlayer這個類 首先音樂的播放來源有三種方式 1.在自己的應用中
MediaPlayer.create(this, R.raw.roar);2.放在自己的sd卡中(內存卡)
mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/1/roar.mp3"));3.在網絡上(要知道哪個路徑)
mediaPlayer.setDataSource(this, Uri.parse("http://192.168.43.202:8080/crickets.mp3"));我寫了一個點擊的方法具體如下:
public void onplay(View view) throws IOException { imageButton = (ImageButton) view; if (mediaPlayer==null){ //播放應用的音頻文件// mediaPlayer = MediaPlayer.create(this, R.raw.roar); //播放內存卡中的音頻文件 mediaPlayer=new MediaPlayer(); //音頻流的類型 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); //設置音頻的來源// mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/1/roar.mp3"));// mediaPlayer.PRepare();//準備一下 //播放網絡音樂 mediaPlayer.setDataSource(this, Uri.parse("http://192.168.43.202:8080/crickets.mp3")); //一步準備 mediaPlayer.prepareAsync(); //設置準備完的監聽 mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mediaPlayer) { //開始播放 mediaPlayer.start(); //點擊播放改變圖標 imageButton.setImageResource(android.R.drawable.ic_media_pause); //獲取音樂的播放最大時間 int durtion=mediaPlayer.getDuration(); //設置進度條的最大值為音樂的播放最大時間 seekBar.setMax(durtion); new Mythred().start(); } }); //給進度條設置一個事件 seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { //獲取拖動的進度 int progress=seekBar.getProgress(); //到那個位置播放 mediaPlayer.seekTo(progress); } }); } else if (mediaPlayer.isPlaying()){ mediaPlayer.pause(); imageButton.setImageResource(android.R.drawable.ic_media_play); } else { mediaPlayer.start(); imageButton.setImageResource(android.R.drawable.ic_media_pause); } }寫了一個子線程(用于seekbar進度條):
class Mythred extends Thread{ @Override public void run() { super.run(); while (seekBar.getProgress()<=seekBar.getMax()){ //每循環一次就取到當前的位置 int cption=mediaPlayer.getCurrentPosition(); seekBar.setProgress(cption); } } }千萬不要忘加了權限:
<!-- 讀取內存卡的權限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 聯網的權限 --> <uses-permission android:name="android.permission.INTERNET" />我用SoundPool寫了一個東西具體代碼如下:
//實例化音頻池(在這里我設置了只能同時播放4個如果播放第五個,那么第一個就關閉了) soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC,0); soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() { @Override public void onLoadComplete(SoundPool soundPool, int i, int i1) { //播放 soundPool.play(i,1,1,1,-1,1); } }); public void playKFC(View view){ soundPool.load(this,R.raw.rooster,1); } public void playTwo(View view){ soundPool.load(this,R.raw.chimp,1); } public void playThree(View view){ soundPool.load(this,R.raw.crickets,1); } public void playFour(View view){ soundPool.load(this,R.raw.roar,1); } public void playDog(View view){ soundPool.load(this,R.raw.dogbark,1); } @Override protected void onDestroy() { super.onDestroy(); if(soundPool!=null){ //釋放內存 soundPool.release(); soundPool=null; } }有啥不懂的或不清楚的,可以立即留言問博主
新聞熱點
疑難解答