編輯:關於Android編程
Android三種路徑的音樂播放:儲存在不同路徑中音樂有不同的獲取方式,過程大同小異,結果當然是一樣。但是它們最重要的不同點是什麼呢。
一.應用內的音頻文件
public void isPlayOrPause(View view){ final ImageButton imageButton= (ImageButton) view if(mediaPlayer==null){ //實例化MediaPlayer //播放應用內 //mediaPlayer = MediaPlayer.create(this, R.raw.love); mediaPlayer.start(); //把圖標修改為暫停的圖標 imageButton.setImageResource(android.R.drawable.ic_media_pause); //獲取音樂的總時長 int duration=mediaPlayer.getDuration(); //設置進度條的最大值為音樂的總時長 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); } }
二.手機內的音頻文件
手機內得在清單文件中配置可閱讀文件權限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE">uses-permission> public void isPlayOrPause(View view){ final ImageButton imageButton= (ImageButton) view; if(mediaPlayer==null){ //播放內存卡中音頻文件 mediaPlayer=new MediaPlayer(); //設置類型 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); //設置音源 try { mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/Music/f.mp3")); //准備一下(內存卡) mediaPlayer.prepare(); } catch (IOException e) { e.printStackTrace(); } mediaPlayer.start(); //把圖標修改為暫停的圖標 imageButton.setImageResource(android.R.drawable.ic_media_pause); //獲取音樂的總時長 int duration=mediaPlayer.getDuration(); //設置進度條的最大值為音樂的總時長 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); } } 三.網絡上的音頻文件 網絡權限 <uses-permission android:name="android.permission.INTERNET" /> public void isPlayOrPause(View view){ final ImageButton imageButton= (ImageButton) view; if(mediaPlayer==null){ //實例化MediaPlayer //設置類型 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); //設置音源 try { //播放網絡音樂 mediaPlayer.setDataSource(this, Uri.parse("http://192.168.43.135/internet.mp3")); //准備(網絡) mediaPlayer.prepareAsync(); } catch (IOException e) { e.printStackTrace(); } //監聽:准備完成的監聽 mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mediaPlayer) { mediaPlayer.start(); //把圖標修改為暫停的圖標 imageButton.setImageResource(android.R.drawable.ic_media_pause); //獲取音樂的總時長 int duration=mediaPlayer.getDuration(); //設置進度條的最大值為音樂的總時長 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); } }
音樂播放器由一SeekBar作為展示,他的進度隨著音樂的播放而前進,當我們對它拖拽時音樂也會相對應
的前進,這時就需要一個線程對它進行操作,同時需要監聽到他當前位置
class MyThread extends Thread{ @Override public void run() { super.run(); while(seekBar.getProgress()<=seekBar.getMax()){ //獲取當前音樂播放的位置 int currentPosition=mediaPlayer.getCurrentPosition(); //讓進度條動起來 seekBar.setProgress(currentPosition); } } } 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); } });
開發中碰到問題之後實現的,覺得可能有的開發者用的到或則希望獨立成一個小功能DEMO,所以就放出來這麼一個DEMO。原本覺得是最後完成後發網站客戶端的,可是這樣體現不出一個
介紹有時候由於需要一些自定義之後的開源庫,無法使用jCenter裡面的官方庫,又懶得自己搭建Maven倉庫,所以我們想要自己在項目裡面直接導入本地的AAR庫。通用方法和問
1.錯誤描述今天在Android4.4 的小米4手機上運行我的程序的時候沒有報錯,而在Android 5.1的華為P7上運行我的程序的時候報了以下的錯誤,錯誤提示如下:E
1. Service和IntentService區別Servicehttp://android.xsoftlab.net/reference/android/app/Se