當你坐公交無聊的時候,當你淹沒在地鐵中人潮中的時候,你是否想內心保持一份的安靜呢,那麼請帶上耳機,打開你的音樂播放器,聽一首老歌帶你進入寧靜的世界,音樂播放這個功能在智能手機出現之前,諾基亞時代,甚至追溯到最開始的大哥大的時候都是屬於音頻的范疇。Android中播放音頻不可避免的使用的一個類是Mediaplayer,視頻調用也是這個類。扯遠了,開始正題吧:
基礎維護
首先這個時候來看看要實現的效果吧:
布局如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.googlemedia.MainActivity" >
<EditText
android:id="@+id/edit_musicPath"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="輸入你喜歡歌曲的路徑" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/btn_Play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="playEvent"
android:text="播放" />
<Button
android:id="@+id/btn_Pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="pauseEvent"
android:text="暫停" />
<Button
android:id="@+id/btn_Stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="stopEvent"
android:text="停止" />
<Button
android:id="@+id/btn_Replay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="replayEvent"
android:text="重播" />
</LinearLayout>
</LinearLayout>
Demo完成
音頻文件:
播放按鈕事件:
public void playEvent(View view){
editText=(EditText) findViewById(R.id.edit_musicPath);
String pathString=editText.getText().toString().trim();
File file=new File(pathString);
if (file.exists()) {
try {
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(pathString);
mediaPlayer.prepare();
mediaPlayer.start();
//多次點擊播放按鈕容易混音
btn_PlayButton.setEnabled(false);
//播放完之後需要回調的時候設置顯示
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
btn_PlayButton.setEnabled(true);
}
});
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else {
Toast.makeText(this, "Sorry,你輸入的路徑有問題,請仔細檢查",Toast.LENGTH_SHORT).show();
}
}
暫停和繼續事件:
lic void pauseEvent(View view){
if ( btn_PauseButton.getText().equals("繼續")) {
mediaPlayer.start();
btn_PauseButton.setText("暫停");
return;
}
if (mediaPlayer!=null&&mediaPlayer.isPlaying()) {
mediaPlayer.pause();
btn_PauseButton.setText("繼續");
}
}
暫停和繼續效果:
停止事件:
public void stopEvent(View view){
if (mediaPlayer!=null&&mediaPlayer.isPlaying()) {
btn_PlayButton.setEnabled(true);
mediaPlayer.stop();
//釋放mediaplayer否則的話會占用內存
mediaPlayer.release();
mediaPlayer=null;
}
btn_PauseButton.setText("暫停");
btn_PlayButton.setEnabled(true);
}
重播事件:
public void replayEvent(View view){
if (mediaPlayer!=null&&mediaPlayer.isPlaying()) {
mediaPlayer.seekTo(0);
}else {
playEvent(view);
}
//重播的時候應該設置播放的狀態
btn_PlayButton.setEnabled(true);
}