Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 【Android 基礎】MediaPlayer(1) 與Service 混合播放音樂

【Android 基礎】MediaPlayer(1) 與Service 混合播放音樂

編輯:關於Android編程

MediaPlayer 其實這個類就是用於播放音頻或者視頻的,那今天就學習學習這個類,這幅圖非常好,讓我偷來了,O(∩_∩)O哈哈~

\

1 --MediaPlayer 使用方法

|-- 1.1簡單的播放本地音樂 上代碼 (路徑我就不寫了 可以在sd卡上放一個mp3格式的音頻 在點擊事件中調用此方法即可播放)

 

//創建
MediaPlayer mediaPlayer = new MediaPlayer ();
		try {
			
			// 路徑可以是本地路徑也可以是網絡路徑
			mediaPlayer.setDataSource("路徑");
			
			// 准備播放
			mediaPlayer.prepare();
			
			// 開始播放
			mediaPlayer.start();
			
			} catch (Exception e) {
			e.printStackTrace();
		}
|-- 1.2 播放網絡音樂 需要說的播放本地音樂最好用同步播放准備mediaPlayer.prepare(); 而播放網絡音樂要用異步播放准備 mediaPlayer.prepare();上代碼

 

 

//創建
MediaPlayer mediaPlayer = new MediaPlayer ();
	try {
			// 路徑可以是本地路徑也可以是網絡路徑
			mediaPlayer.setDataSource("網絡路徑");
			
			// 播放網路音樂
			mediaPlayer.prepareAsync();

			mediaPlayer.setOnPreparedListener(new OnPreparedListener() {

				@Override
				public void onPrepared(MediaPlayer mp) {
					// 准備完成 開始播放
					mediaPlayer.start();
				}
			});

		} catch (Exception e) {
			e.printStackTrace();
		}

至此我們可以簡單的播放音樂了

 

2 -- 與Service組合起來播放音樂 先說下Service 的特點

|-- 2.1 Service是Android四大組件之一 也就是說你聲明了Service就要在清單文件中注冊

|-- 2.2 Service 是長期運行在後台的,它沒有界面但在Android中的地位與Activity是一樣重要的

|-- 2.3 Service第一次開啟Service,Service執行onCreate方法,onStart方法 第二次開啟Service只執行onStart方法

|-- 2.4Service一旦被開啟,服務就會在後台長期運行 直到用戶手動停止

|-- 2.5Service 有兩種開啟方式 (1)通過startService方法開啟了一個Service (2) 通過BindService 方式開啟Service

 

3 -- 為了當Activity界面隱藏的時候還是能播放音樂 我們把播放音樂的邏輯放在Service中

|-- 3.1 創建MService 繼承 Service 注冊在清單文件中 這一步很重要

|-- 3.2 創建MediaPlayer 類並在MService 的onCreate()方法進行實例化

|-- 3.3 創建內部類MBidner 繼承Binder Binder是IBinder的直接實現子類

|-- 3.4onBind()方法中返回MBinder的匿名對象

|-- 3.5 創建 播放 暫停 繼續播放等方法

|-- 3.6 定義IService接口 並在接口中創建 播放 暫停 繼續播放 滑動到指定位置播放等操作

|-- 3.7MBidner 類實現IService接口並覆寫裡面的方法 調用MService 中播放 暫停 繼續播放等邏輯

上代碼 MService類

 

public class MService extends Service {
	// 因為之後很多處都要用到 所以最好定義成成員變量
	private MediaPlayer mediaPlayer;

	// Service第一次啟動的時候會走此方法 所以我們要在這裡對MediaPalyer進行初始化
	public void onCreate() {
		mediaPlayer = new MediaPlayer();
		super.onCreate();

	}

	@Override
	public IBinder onBind(Intent intent) {
		return new MBidner();
	}

	// 播放邏輯
	protected void play() {

	}

	// 暫停邏輯
	protected void pause() {

	}

	// 繼續播放邏輯
	protected void continuePlay() {

	}

	// 1.在服務的內部定義IBinder類的實現 Binder是IBinder的直接實現子類 IBinder是一個接口
	// 2.在 onBind 方法中返回該類的匿名對象

	public class MBidner extends Binder implements IService {

		// 播放音樂
		public void play() {
			play();
		}

		// 暫停音樂
		public void pause() {

		}

		// 繼續播放
		public void continuePlay() {
			continuePlay();
		}

		// 滑動進度條到指定位置播放
		public void slide(int position) {

		}

	}

}

 

上代碼 IService 接口

 

//把想暴露的方法都定義在接口中
public interface IService {
	//播放音樂
	public void play();
	//暫停音樂
	public void pause();
	//繼續播放
	public void continuePlay();
	//滑動進度條到指定位置播放
	public void slide(int position);
}

4 -- 接下來我們就可以在Service中寫播放音樂的邏輯了 還是上代碼

 

 

// 播放邏輯
	protected void play() {
		System.out.println("音樂播放了");
		try {
			// 路徑可以是本地路徑也可以是網絡路徑
			mediaPlayer.setDataSource("");
			// 准備播放
			mediaPlayer.prepare();
			// 開始播放
			mediaPlayer.start();

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

|-- 4.1暫停播放的邏輯 還是上代碼

 

 

// 暫停邏輯
	protected void pause() {
		mediaPlayer.pause();

		System.out.println("音樂暫停了");
	}
|-- 4.2繼續播放的邏輯 還是上代碼 這裡值得一說的是MediaPlayer類中繼續播放音樂的方法還是start() 官方的解釋是開始播放 繼續 記憶
// 繼續播放邏輯
	protected void continuePlay() {
		// 開始或繼續播放 記憶播放
		mediaPlayer.start();
		System.out.println("音樂繼續播放");

	}

5 -- 總得有一個界面來啟動播放吧 好吧 Activity來了上代碼

 

 

public class Media01 extends Activity implements OnClickListener {
	// 意圖對象
	private Intent intent;
	//ji
	IServicemService;

	MConnection connetion;

	Button play, pause, continuePlay;

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_music);

		initView();

		// 1.先調用startService,目的是可以保證服務在後台長期運行
		intent = new Intent(getApplicationContext(), MusicService.class);
		startService(intent);

		// 2.調用BindService 目的為了獲取我們定義的中間對象,就可以間接調用服務中的方法
		connetion = new MConnection();
		bindService(intent, connetion, BIND_AUTO_CREATE);
	}

	private void initView() {
		play = (Button) findViewById(R.id.play);
		pause = (Button) findViewById(R.id.pause);
		continuePlay = (Button) findViewById(R.id.continuePlay);

		play.setOnClickListener(this);
		pause.setOnClickListener(this);
		continuePlay.setOnClickListener(this);

	}

	// 監聽服務的狀態
	public class MConnection implements ServiceConnection {

		// 當服務連接成功的時候調用
		public void onServiceConnected(ComponentName name, IBinder service) {
			// 獲取我們的中間對象
			mService = (IService) service;
		}

		// 當服務失去連接的時候調用此方法
		public void onServiceDisconnected(ComponentName name) {

		}

	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.play:
			// 調用服務中的方法
			mService.play();

			break;
		case R.id.pause:
			mService.pause();
			break;
		case R.id.continuePlay:
			mService.continuePlay();

			break;

		}
	}

	// 記住 當界面銷毀的時候一定要解綁
	protected void onDestroy() {
		unbindService(connetion);
		super.onDestroy();
	}

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