Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android MediaPlayer在線音樂播放器

Android MediaPlayer在線音樂播放器

編輯:關於Android編程

本文將的是一個在線音樂播放器,文中對相應操作做了比較詳細的講解,已達到實現效果,並了解播放器原理的目的。

源代碼:

布局文件:

activity_audio_httpplayer:



    

    

    

    

AudioHTTPPLayer.java:

package com.multimediademo7audiohttpplayer;

import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
/**
 * 在線音樂播放Demo。
 *
 */
public class AudioHTTPPLayer extends Activity implements OnCompletionListener,
		OnErrorListener, OnBufferingUpdateListener, OnPreparedListener,
		OnClickListener {
	private MediaPlayer mediaPlayer;
	private Button startButton, stopButton;
	private TextView statusTextView, bufferValueTextView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_audio_httpplayer);

		init();
	}

	/**
	 * 實例化組件。
	 */
	private void init() {
		startButton = (Button) findViewById(R.id.startButton);
		stopButton = (Button) findViewById(R.id.stopButton);

		statusTextView = (TextView) findViewById(R.id.statusDisplayTextView);
		bufferValueTextView = (TextView) findViewById(R.id.bufferValueTextView);

		startButton.setOnClickListener(this);
		stopButton.setOnClickListener(this);
		statusTextView.setText("onCreate");

		mediaPlayer = new MediaPlayer();

		mediaPlayer.setOnCompletionListener(this);
		mediaPlayer.setOnErrorListener(this);
		mediaPlayer.setOnBufferingUpdateListener(this);
		mediaPlayer.setOnPreparedListener(this);

		statusTextView.setText("MediaPlayer created");
		try {
			/**
			 * 調用setDataSource();方法,並傳入想要播放的音頻文件的HTTP位置。
			 */
			mediaPlayer
					.setDataSource("http://zhangmenshiting.baidu.com/data2/music/36865035/17765263198000128.mp3?xcode=81bb2569613f49564c53ca228d87e526d7ed2c9c576c829e");
		} catch (Exception e) {
			e.printStackTrace();
		}
		statusTextView.setText("setDataSource done");
		statusTextView.setText("calling prepareAsync");
		/**
		 * 調用prepareAsync方法,它將在後台開始緩沖音頻文件並返回。
		 */
		mediaPlayer.prepareAsync();
	}

	/**
	 * 當MediaPlayer正在緩沖時,將調用該Activity的onBufferingUpdate方法。
	 */
	@Override
	public void onBufferingUpdate(MediaPlayer mp, int percent) {
		bufferValueTextView.setText("" + percent + "%");
	}

	/**
	 * 當完成prepareAsync方法時,將調用onPrepared方法,表明音頻准備播放。
	 */
	@Override
	public void onPrepared(MediaPlayer mp) {
		statusTextView.setText("onPrepared called");
		startButton.setEnabled(true);
	}

	/**
	 * 當MediaPlayer完成播放音頻文件時,將調用onCompletion方法。
	 * 此時設置“播放”按鈕可點擊,“暫停”按鈕不看點擊(表示可以再次播放)。
	 */
	@Override
	public void onCompletion(MediaPlayer mp) {
		statusTextView.setText("onCompletion called");
		startButton.setEnabled(true);
		stopButton.setEnabled(false);
	}

	/**
	 * 當按手機上的返回鍵的時候,會自動調用系統的onKeyDown方法,而onKeyDown方法又會調用onDestroy()方法銷毀該Activity
	 * , 此時如果onDestroy()方法不重寫,那麼正在播放的音樂是不會停止的(大家可以試一下),所以這時候要重寫onDestroy()方法,
	 * 在該方法中 加入mediaPlayer.stop()方法,表示按返回鍵的時候,會調用mediaPlayer對象的stop方法,從而停止音樂的播放。
	 */
	@Override
	protected void onDestroy() {
		super.onDestroy();
		mediaPlayer.stop();
		Log.d("zhongyao", "onDestroy()");
	}

	/**
	 * 如果MediaPlayer出現錯誤,將調用onError方法。
	 */
	@Override
	public boolean onError(MediaPlayer mp, int what, int extra) {
		statusTextView.setText("onError called");
		switch (what) {
		case MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK:
			statusTextView
					.setText("MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK"
							+ extra);
			break;
		case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
			statusTextView.setText("MEDIA_ERROR_SERVER_DIED" + extra);
			break;
		case MediaPlayer.MEDIA_ERROR_UNKNOWN:
			statusTextView.setText("MEDIA_ERROR_UNKNOWN");
			break;
		default:
			break;
		}
		return false;
	}

	/**
	 * 當按下播放按鈕時,調用MediaPlayer的start方法; 當按下暫停按鈕時,將調用MediaPlayer的Pause方法。
	 */
	@Override
	public void onClick(View v) {
		if (v == startButton) {
			mediaPlayer.start();
			statusTextView.setText("start called");
			startButton.setEnabled(false);
			stopButton.setEnabled(true);
		} else if (v == stopButton) {
			mediaPlayer.pause();
			statusTextView.setText("pause called");
			startButton.setEnabled(true);
			stopButton.setEnabled(false);
		}
	}

}

源代碼下載:

點擊下載源碼

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved