android如何長時間音樂播放實現MediaPlayer

來源:互聯網
上載者:User

  長時間的音樂因為體積比較大,放在手機記憶體中,對資源的佔用太大。

  MediaPlayer類可以用來播放音頻、視頻和流媒體,MediaPlayer包含了Audio和Video的播放功能。

  在Android的介面上,Music和Video兩個應用程式都是調用MediaPlayer實現的。

  MediaPlayer在底層是基於OpenCore(PacketVideo)的庫實現的。

  一.基礎知識:

  首先來看看MediaPlayer的生命週期:

  下邊是MediaPlayer提供的常用方法:

  [java]

  方法 說明

  MediaPlayer 構造方法

  create 建立一個要播放的多媒體

  getCurrentPosition 得到當前播放位置

  getDuration 得到檔案的時間

  getVideoHeight 得到視頻的高度

  getVideoWidth 得到視頻的寬度

  isLooping 是否迴圈播放

  isPlaying 是否現正播放

  pause 暫停

  prepare 準備(同步)

  prepareAsync 準備(非同步)

  release 釋放MediaPlayer對象

  reset 重設MediaPlayer對象

  seekTo 指定播放的位置(以毫秒為單位的時間)

  setAudioStreamType 設定流媒體的類型

  setDataSource 設定多媒體資料來源

  setDisplay 設定用SurfaceHolder來顯示多媒體

  setLooping 設定是否迴圈播放

  setOnButteringUpdateListener 網路流媒體的緩衝監聽

  setOnErrorListener 設定錯誤資訊監聽

  setOnVideoSizeChangedListener 視頻尺寸監聽

  setScreenOnWhilePlaying 設定是否使用SurfaceHolder來保持螢幕顯示

  setVolume 設定音量

  start 開始播放

  stop 停止播放

  方法 說明

  MediaPlayer 構造方法

  create 建立一個要播放的多媒體

  getCurrentPosition 得到當前播放位置

  getDuration 得到檔案的時間

  getVideoHeight 得到視頻的高度

  getVideoWidth 得到視頻的寬度

  isLooping 是否迴圈播放

  isPlaying 是否現正播放

  pause 暫停

  prepare 準備(同步)

  prepareAsync 準備(非同步)

  release 釋放MediaPlayer對象

  reset 重設MediaPlayer對象

  seekTo 指定播放的位置(以毫秒為單位的時間)

  setAudioStreamType 設定流媒體的類型

  setDataSource 設定多媒體資料來源

  setDisplay 設定用SurfaceHolder來顯示多媒體

  setLooping 設定是否迴圈播放

  setOnButteringUpdateListener 網路流媒體的緩衝監聽

  setOnErrorListener 設定錯誤資訊監聽

  setOnVideoSizeChangedListener 視頻尺寸監聽

  setScreenOnWhilePlaying 設定是否使用SurfaceHolder來保持螢幕顯示

  setVolume 設定音量

  start 開始播放

  stop 停止播放

  這個圖和這些函數名稱,對於我們初學者來說, 沒必要太在意, 瞭解一下基本的名詞即可,等到項目中確實遇到互動性問題時,我們再回來仔細探討。

  我們只要明白下面幾行代碼即可(Android中通過MediaPlayer來播放音樂的步驟):

  [java]

  MediaPlayer mp = new MediaPlayer();//構建MediaPlayer對象

  mp.setDataSource("/sdcard/test.mp3");//設定檔案路徑

  mp.prepare();//準備

  mp.start();//開始播放

  MediaPlayer mp = new MediaPlayer();//構建MediaPlayer對象

  mp.setDataSource("/sdcard/test.mp3");//設定檔案路徑

  mp.prepare();//準備

  mp.start();//開始播放

  上面四行代碼實現了媒體檔案的播放,但是如果還想再加入對音量的控制,就要涉及到AudioMananger類。

  AudioManager中常用的方法如下:

  A. 擷取聲音管理器:

  [java]

  AudioManager audioManager = (AudioManager) this.getSystemService(AUDIO_SERVICE);

  AudioManager audioManager = (AudioManager) this.getSystemService(AUDIO_SERVICE);

  B、設定聲音模式:

  [java]

  //聲音模式

  AudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);

  //靜音

  AudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);

  //震動模式

  AudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);

  //聲音模式

  AudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);

  //靜音

  AudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);

  //震動模式

  AudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);

  C、調整聲音大小:

  [java]

  //減少聲音音量

  AudioManager.adjustVolume(AudioManager.ADJUST_LOWER, 0);

  //調大聲音音量

  AudioManager.adjustVolume(AudioManager.ADJUST_RAISE, 0);

  //減少聲音音量

  AudioManager.adjustVolume(AudioManager.ADJUST_LOWER, 0);

  //調大聲音音量

  AudioManager.adjustVolume(AudioManager.ADJUST_RAISE, 0);

  D、擷取音量大小:

  [java]

  // 取得當前裝置的當前音量

  AudioManager.getStreamVolume(int streamType)

  // 取得當前裝置的最大音量

  AudioManager.getStreamMaxVolume(int streamType)

  // 取得當前裝置的當前音量

  AudioManager.getStreamVolume(int streamType)

  // 取得當前裝置的最大音量

  AudioManager.getStreamMaxVolume(int streamType)

  E、其他:

  [java]

  getMode()擷取音頻模式

  getRingerMode()擷取鈴聲震動模式

  setRingerMode(int ringerMode) 改變鈴聲模式

  這裡如果使用了和手機震動有關的模式,記得添加許可權。android.permission.VIBRATE哦!

  getMode()擷取音頻模式

  getRingerMode()擷取鈴聲震動模式

  setRingerMode(int ringerMode) 改變鈴聲模式

  這裡如果使用了和手機震動有關的模式,記得添加許可權。android.permission.VIBRATE哦!

  二.編程實現:

  1. 介面編輯(reslayoutmain.xml):

  [java]

  

  android:orientation="vertical"

  android:layout_width="fill_parent"

  android:layout_height="fill_parent"

  >

  

  android:text="播放音樂"

  android:id="@+id/ButtonPlay"

  android:layout_width="fill_parent"

  android:layout_height="wrap_content">

  

  

  android:text="暫停音樂"

  android:id="@+id/ButtonPause"

  android:layout_width="fill_parent"

  android:layout_height="wrap_content">

  

  

  android:text="停止音樂"

  android:id="@+id/ButtonStop"

  android:layout_width="fill_parent"

  android:layout_height="wrap_content">

  

  

  android:text="增大音樂"

  android:id="@+id/ButtonVAdd"

  android:layout_width="fill_parent"

  android:layout_height="wrap_content">

  

  

  android:text="降低音樂"

  android:id="@+id/ButtonVReduce"

  android:layout_width="fill_parent"

  android:layout_height="wrap_content">

  

  

  

  android:orientation="vertical"

  android:layout_width="fill_parent"

  android:layout_height="fill_parent"

  >

  

  android:text="播放音樂"

  android:id="@+id/ButtonPlay"

  android:layout_width="fill_parent"

  android:layout_height="wrap_content">

  

  

  android:text="暫停音樂"

  android:id="@+id/ButtonPause"

  android:layout_width="fill_parent"

  android:layout_height="wrap_content">

  

  

  android:text="停止音樂"

  android:id="@+id/ButtonStop"

  android:layout_width="fill_parent"

  android:layout_height="wrap_content">

  

  

  android:text="增大音樂"

  android:id="@+id/ButtonVAdd"

  android:layout_width="fill_parent"

  android:layout_height="wrap_content">

  

  

  android:text="降低音樂"

  android:id="@+id/ButtonVReduce"

  android:layout_width="fill_parent"

  android:layout_height="wrap_content">

  

  

  介面布局效果如下:

  2. 代碼編輯(srcwyfzclMyActivity.java):

  [java]

  package wyf.zcl;

  import android.app.Activity; //引入相關包

  import android.media.AudioManager; //引入相關包

  import android.media.MediaPlayer; //引入相關包

  import android.os.Bundle; //引入相關包

  import android.view.View; //引入相關包

  import android.widget.Button; //引入相關包

  import android.widget.Toast;

  public class MyActivity extends Activity {

  /** Called when the activity is first created. */

  private Button bPlay; //播放按鈕

  private Button bPause; //暫停按鈕

  private Button bStop; //停止按鈕

  private Button bAdd; //增大音量

  private Button bReduce; //降低音量

  private boolean pauseFlag=false; //暫停標記,true暫停態,false非暫停態

  MediaPlayer mp; //MediaPlayer引用

  AudioManager am; //AudioManager引用

  @Override

  public void onCreate(Bundle savedInstanceState) { //Activity建立時調用

  super.onCreate(savedInstanceState);

  setContentView(R.layout.main); //設定Activity的顯示內容

  bPlay=(Button)findViewById(R.id.ButtonPlay); //播放按鈕的執行個體化

  bPause=(Button)findViewById(R.id.ButtonPause); //暫停按鈕的執行個體化

  bStop=(Button)findViewById(R.id.ButtonStop); //停止按鈕的執行個體化

  bAdd=(Button)findViewById(R.id.ButtonVAdd); //增大音量按鈕的執行個體化

  bReduce =(Button)findViewById(R.id.ButtonVReduce);//降低音量按鈕的執行個體化

  mp=new MediaPlayer();

  am=(AudioManager) this.getSystemService(this.AUDIO_SERVICE);

  bPlay.setOnClickListener(new View.OnClickListener() {//播放按鈕的監聽器

  @Override

  public void onClick(View v) {

  try{

  mp.setDataSource("/sdcard/music/sound_of_dream_DJ.mp3"); //載入音頻,進入Initialized狀態。

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

  try{

  mp.prepare(); //進入prepared狀態。

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

  mp.start(); //播放音樂

  Toast.makeText(MyActivity.this, "播放音樂", Toast.LENGTH_SHORT).show();

  }});

  bPause.setOnClickListener(new View.OnClickListener() { //暫停按鈕添加監聽器

  @Override

  public void onClick(View v) {

  if(mp.isPlaying()){ //如果是在播放態

  mp.pause(); //調用暫停方法

  pauseFlag=true; //設定暫停標記

  }else if(pauseFlag){

  mp.start(); //播放音樂

  pauseFlag=false; //設定暫停標記

  Toast.makeText(MyActivity.this, "暫停播放", Toast.LENGTH_SHORT).show();

  }}

  });

  bStop.setOnClickListener(new View.OnClickListener() { //停止按鈕添加監聽器

  @Override

  public void onClick(View v) {

  mp.stop(); //停止播放

  mp.reset(); //重設狀態到uninitialized態

  try{

  mp.setDataSource("/sdcard/music/sound_of_dream_DJ.mp3"); //載入音頻,進入Initialized狀態。

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

  try{

  mp.prepare(); //進入prepared狀態。

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

  Toast.makeText(MyActivity.this, "停止播放", Toast.LENGTH_SHORT).show();

  }});

  bAdd.setOnClickListener(new View.OnClickListener() { //音量增大按鈕添加監聽器

  @Override

  public void onClick(View v) {

  am.adjustVolume(AudioManager.ADJUST_RAISE, 0); //增大音量

  System.out.println("faaa");

  Toast.makeText(MyActivity.this, "增大音量", Toast.LENGTH_SHORT).show();

  }});

  bReduce.setOnClickListener(new View.OnClickListener() { //音量降低按鈕添加監聽器

  @Override

  public void onClick(View v) {

  am.adjustVolume(AudioManager.ADJUST_LOWER, 0); //減小音量

  Toast.makeText(MyActivity.this, "減小音量", Toast.LENGTH_SHORT).show();

  }});

  }

  }

  package wyf.zcl;

  import android.app.Activity; //引入相關包

  import android.media.AudioManager; //引入相關包

  import android.media.MediaPlayer; //引入相關包

  import android.os.Bundle; //引入相關包

  import android.view.View; //引入相關包

  import android.widget.Button; //引入相關包

  import android.widget.Toast;

  public class MyActivity extends Activity {

  /** Called when the activity is first created. */

  private Button bPlay; //播放按鈕

  private Button bPause; //暫停按鈕

  private Button bStop; //停止按鈕

  private Button bAdd; //增大音量

  private Button bReduce; //降低音量

  private boolean pauseFlag=false; //暫停標記,true暫停態,false非暫停態

  MediaPlayer mp; //MediaPlayer引用

  AudioManager am; //AudioManager引用

  @Override

  public void onCreate(Bundle savedInstanceState) { //Activity建立時調用

  super.onCreate(savedInstanceState);

  setContentView(R.layout.main); //設定Activity的顯示內容

  bPlay=(Button)findViewById(R.id.ButtonPlay); //播放按鈕的執行個體化

  bPause=(Button)findViewById(R.id.ButtonPause); //暫停按鈕的執行個體化

  bStop=(Button)findViewById(R.id.ButtonStop); //停止按鈕的執行個體化

  bAdd=(Button)findViewById(R.id.ButtonVAdd); //增大音量按鈕的執行個體化

  bReduce =(Button)findViewById(R.id.ButtonVReduce);//降低音量按鈕的執行個體化

  mp=new MediaPlayer();

  am=(AudioManager) this.getSystemService(this.AUDIO_SERVICE);

  bPlay.setOnClickListener(new View.OnClickListener() {//播放按鈕的監聽器

  @Override

  public void onClick(View v) {

  try{

  mp.setDataSource("/sdcard/music/sound_of_dream_DJ.mp3"); //載入音頻,進入Initialized狀態。

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

  try{

  mp.prepare(); //進入prepared狀態。

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

  mp.start(); //播放音樂

  Toast.makeText(MyActivity.this, "播放音樂", Toast.LENGTH_SHORT).show();

  }});

  bPause.setOnClickListener(new View.OnClickListener() { //暫停按鈕添加監聽器

  @Override

  public void onClick(View v) {

  if(mp.isPlaying()){ //如果是在播放態

  mp.pause(); //調用暫停方法

  pauseFlag=true; //設定暫停標記

  }else if(pauseFlag){

  mp.start(); //播放音樂

  pauseFlag=false; //設定暫停標記

  Toast.makeText(MyActivity.this, "暫停播放", Toast.LENGTH_SHORT).show();

  }}

  });

  bStop.setOnClickListener(new View.OnClickListener() { //停止按鈕添加監聽器

  @Override

  public void onClick(View v) {

  mp.stop(); //停止播放

  mp.reset(); //重設狀態到uninitialized態

  try{

  mp.setDataSource("/sdcard/music/sound_of_dream_DJ.mp3"); //載入音頻,進入Initialized狀態。

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

  try{

  mp.prepare(); //進入prepared狀態。

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

  Toast.makeText(MyActivity.this, "停止播放", Toast.LENGTH_SHORT).show();

  }});

  bAdd.setOnClickListener(new View.OnClickListener() { //音量增大按鈕添加監聽器

  @Override

  public void onClick(View v) {

  am.adjustVolume(AudioManager.ADJUST_RAISE, 0); //增大音量

  System.out.println("faaa");

  Toast.makeText(MyActivity.this, "增大音量", Toast.LENGTH_SHORT).show();

  }});

  bReduce.setOnClickListener(new View.OnClickListener() { //音量降低按鈕添加監聽器

  @Override

  public void onClick(View v) {

  am.adjustVolume(AudioManager.ADJUST_LOWER, 0); //減小音量

  Toast.makeText(MyActivity.this, "減小音量", Toast.LENGTH_SHORT).show();

  }});

  }

  }

  播放的是SD卡上的" /sdcard/music/sound_of_dream_DJ.mp3 "檔案。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.