編輯:關於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寬高的方法。分享給大家供大家參考,具體如下:我們經常會動態修改RelativeLayout的寬高,這樣
Android UI工具包提供了一些布局管理器,它們使用起來相當容易,而且,大多數的時候,你只需要使用它們最基本的特征來實現UI。執著於基本特征的使用對於創建UI來說,往
添加LeakCanary依賴包在主模塊app下的build.gradle下添加如下依賴:debugCompile 'com.squar
關於activity的生命周期:要知道的知識點1.每個生命活動執行的順序、2.每個生命周期我們應該做怎麼樣的處理:每個方法保留的時間有多久;那個方法是活動阻塞的,他沒有做