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(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; } }}新聞熱點
疑難解答