Android 音樂播放器有很多種方式,首先由一個音樂播放器:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
//進度條
<SeekBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/main_seekbar"
android:layout_weight="1"
/>
//播放按鈕
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/ic_media_play"
android:onClick="isPlayorPauser"/>
</LinearLayout>
第一種就是播放應用内的音頻檔案,将你需要播放的音頻檔案放入Raw檔案中,調用MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.cd);取到raw檔案中的音頻,再用MediaPlayer 的準備完成的監聽事件mediaPlayer.setOnPreparedListener() 中播放,mediaPlayer.start();方法。
第二種是記憶體卡裡面音頻檔案,首先執行個體化 MediaPlayer mediaPlayer = new MediaPlayer();再設定屬性。準備方法: mediaPlayer.prepare();
第三種是播放網絡音樂(Tomcat),需要配置Tomcat,再一步準備:mediaPlayer.prepareAsync();
public class MainActivity extends AppCompatActivity {
private SeekBar main_seekbar;
private MediaPlayer mediaPlayer;
private SurfaceView main_surfaceview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
main_seekbar = (SeekBar) findViewById(R.id.main_seekbar);
//得到視訊播放器
main_surfaceview = (SurfaceView) findViewById(R.id.main_surfaceview);
//給進度條設定點選拖動事件
main_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) {
//擷取拖動的進度 給mediaPlayer設定進度
int length=main_seekbar.getProgress();
mediaPlayer.seekTo(length);
}
});
}
public void isPlayorPauser(View view) throws Exception{
final ImageButton imageButton= (ImageButton) view;
//如果mediaPlayer有值
if (mediaPlayer==null) {
//播放應用内的音頻檔案
//mediaPlayer = MediaPlayer.create(this, R.raw.cd);
//播放記憶體卡裡面音頻檔案
mediaPlayer = new MediaPlayer();
//設定音頻流的類型
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//設定音源
mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/kugou/mv/nlch.mp4"));
//準備一下(記憶體卡)
mediaPlayer.prepare();
/* //播放網絡音樂(Tomcat)
mediaPlayer.setDataSource(this, Uri.parse("http://192.168.43.135/internet.mp3"));
//準備(異步準備)
mediaPlayer.prepareAsync();*/
//設定準備完成的監聽
// mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
// @Override
// public void onPrepared(MediaPlayer mediaPlayer) {
//将媒體播放器的捕捉的畫面展示到surfaceView
mediaPlayer.setDisplay(main_surfaceview.getHolder());
//開始播放
mediaPlayer.start();
//設定按鈕改變圖檔
imageButton.setImageResource(android.R.drawable.ic_media_pause);
//擷取音樂的播放時長
int duration=mediaPlayer.getDuration();
//設定進度條的最大值(音樂的播放時長)
main_seekbar.setMax(duration);
new MyThread().start();
// }
// });
}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);
}
}
class MyThread extends Thread{
@Override
public void run() {
super.run();
//判斷拖動長度是否小于seekbar的最大長度
if (main_seekbar.getProgress()<=main_seekbar.getMax()){
//擷取音樂的目前播放位置
int c=mediaPlayer.getCurrentPosition();
//設定seekbar的位置
main_seekbar.setProgress(c);
}
}
}
}
最後,我在說一個控件,叫音頻池(SoundPool),雖然已經過時。但是還可以用。用來做一些混音。有興趣的可以了解下:
public class SoundPoolActivity extends AppCompatActivity {
private SoundPool soundPool;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_soundpool);
//執行個體化音頻池
soundPool = new SoundPool(, AudioManager.STREAM_MUSIC,);
//設定監聽事件(加載音頻)
soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int i, int i1) {
//播放
soundPool.play(i,,,,-,);
}
});
}
public void playKFC(View view){
soundPool.load(this,R.raw.rooster,);
}
public void playTwo(View view){
soundPool.load(this,R.raw.chimp,);
}
public void playThree(View view){
soundPool.load(this,R.raw.crickets,);
}
public void playFour(View view){
soundPool.load(this,R.raw.roar,);
}
public void playDog(View view){
soundPool.load(this,R.raw.dogbark,);
}
@Override
protected void onDestroy() {
super.onDestroy();
//退出應用程式時關閉音頻池
if(soundPool!=null){
soundPool.release();
soundPool=null;
}
}
}