我給大家分享一個我寫的一個簡單的音樂播放的功能
說起音樂播放器就會想到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;
}
}
有啥不懂的或不清楚的,可以立即留言問博主