編輯:關於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);
}
// 播放邏輯
protected void play() {
System.out.println("音樂播放了");
try {
// 路徑可以是本地路徑也可以是網絡路徑
mediaPlayer.setDataSource("");
// 准備播放
mediaPlayer.prepare();
// 開始播放
mediaPlayer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
// 暫停邏輯
protected void pause() {
mediaPlayer.pause();
System.out.println("音樂暫停了");
}
|-- 4.2繼續播放的邏輯 還是上代碼 這裡值得一說的是MediaPlayer類中繼續播放音樂的方法還是start() 官方的解釋是開始播放 繼續 記憶
// 繼續播放邏輯
protected void continuePlay() {
// 開始或繼續播放 記憶播放
mediaPlayer.start();
System.out.println("音樂繼續播放");
}
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();
}
}
Android編程動態修改RelativeLayout寬高的方法
本文實例講述了Android編程動態修改RelativeLayout寬高的方法。分享給大家供大家參考,具體如下:我們經常會動態修改RelativeLayout的寬高,這樣
Android布局技巧之創建高效布局
Android UI工具包提供了一些布局管理器,它們使用起來相當容易,而且,大多數的時候,你只需要使用它們最基本的特征來實現UI。執著於基本特征的使用對於創建UI來說,往
Android內存洩漏檢測-LeakCanary
添加LeakCanary依賴包在主模塊app下的build.gradle下添加如下依賴:debugCompile 'com.squar
Android基礎部分再學習---activity的生命周期
關於activity的生命周期:要知道的知識點1.每個生命活動執行的順序、2.每個生命周期我們應該做怎麼樣的處理:每個方法保留的時間有多久;那個方法是活動阻塞的,他沒有做