24、從頭學Android之多媒體–使用MediaPlayer播放音頻

來源:互聯網
上載者:User

MediaPlayer類

靜態構造方法

方法名稱

描述

public static MediaPlayer create(Context context, Uri uri, SurfaceHolder holder)

指定從資源ID對應的資源檔中來裝載音樂檔案,同時指定了SurfaceHolder對象並返回MediaPlyaer對象

public static MediaPlayer create(Context context, int resid)

指定從資源ID對應的資源檔中來裝載音樂檔案,並返回MediaPlyaer對象

public static MediaPlayer create(Context context, Uri uri)

指定從Uri對應的資源檔中來裝載音樂檔案,並返回MediaPlyaer對象

 

常用方法

方法名稱

描述

public void start ()

開始或恢複播放

public void stop()

停止播放

public void pause()

暫停播放

public void setDataSource (String path)

從指定的裝載path路徑所代表的檔案

public void setDataSource (FileDescriptor fd, long offset, long length)

指定裝載fd所代表的檔案中從offset開始、長度為length的檔案內容

public void setDataSource (FileDescriptor fd)

指定裝載fd所代表的檔案

public void setDataSource (Context context, Uri uri)

指定裝載uri所代表的檔案

public void setDataSource (Context context, Uri uri, Map<String, String> headers)

指定裝載uri所代表的檔案

public void prepare()

預期準備,因為setDataSource()方法之後,MediaPlayer並未真正的去裝載那些音頻檔案,需要調用prepare()這個方法去準備音頻

public void setLooping(boolean looping)

設定是否迴圈播放這個音樂檔案

public void setSurface(Surface surface)

設定Surface

public void setVolume(float leftVolume,float rightVolume)

設定音量

public void setDisplay(SurfaceHolder sh)

設定顯示方式

public void seekTo(int mses)

尋求指定的時間位置。

public void isLooping()

判斷是否迴圈播放

public void isPlaying()

判斷是否現正播放

public void release()

釋放相關該MediaPlayer對象的資源。

 

綁定事件監聽器

監聽器

描述

public void setOnCompletionListener (MediaPlayer.OnCompletionListener listener)

為MediaPlayer的播放完成事件綁定事件監聽器

public void setOnErrorListener (MediaPlayer.OnErrorListener listener)

為MediaPlayer的播放錯誤事件綁定事件監聽器

public void setOnPreparedListener (MediaPlayer.OnPreparedListener listener)

當MediaPlayer調用prepare()方法時觸發該監聽器

public void setOnSeekCompleteListener (MediaPlayer.OnSeekCompleteListener listener)

當MediaPlayer調用seek()方法的時候觸發該監聽器

 

播放音頻

1、播放應用的資源檔(res/raw/)

通過我們上面介紹的幾個靜態建構函式建立MediaPlayer對象

MediaPlayer  mediaPlayer = MediaPlayer.create(MediaPlayerDemoActivity.this,              R.raw.a1);

 

2、播放應用的原始資源檔(assets)

1)        通過Context.getAssets()方法獲得AssetManager對象

2)        通過AssetManager對象的openFd(String name)方法開啟指定的原生資源檔夾,返回一個AssetFileDescriptor對象

3)        通過AssetFileDescriptor的getFileDescriptor()得到一個FileDescriptor對象

4)        通過public void setDataSource (FileDescriptor fd, long offset, long length)來建立MediaPlayer對象

5)        調用MediaPlayer.prepare()方法準備音頻

6)        調用MediaPlayer的start()、pause()、stop()等方法控制

AssetFileDescriptor fileDescriptor = assetManager                 .openFd("a2.mp3");            mediaPlayer = new MediaPlayer();           mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(),                 fileDescriptor.getStartOffset(),                 fileDescriptor.getLength());        mediaPlayer.prepare();

          mediaPlayer.start();

3、播放外部儲存上的音頻資源檔(sdcard)

1)        建立MediaPlayer對象,通過MediaPlayer對象的setDataSource(String path)方法裝載預定的音頻檔案

2)        調用MediaPlayer對象的prepare()方法準備音頻

3)        調用MediaPlayer的start()、pause()、stop()等方法控制

mediaPlayer = new MediaPlayer();           mediaPlayer.setDataSource("/mnt/sdcard/a3.mp3");           mediaPlayer.prepare();           mediaPlayer.start(); 

4、播放網路上的音頻檔案

1)        根據網路上的地址建立Uri對象

2)        通過public void setDataSource (Context context, Uri uri)設定音頻來源裝載音頻檔案

3)        調用MediaPlayer對象的prepare()方法準備音頻

4)        調用MediaPlayer的start()、pause()、stop()等方法控制

mediaPlayer = new MediaPlayer();           // 通過Uri解析一個網路地址           Uri uri = Uri                 .parse("http://zhangmenshiting2.baidu.com/data2/music/9138619/9138619.mp3?xcode=dd0d0d0df7218eb9a79c7fd72cefb648&mid=0.18926789458694");           mediaPlayer.setDataSource(MediaPlayerDemoActivity.this, uri);            mediaPlayer.prepare();mediaPlayer.start();

 

當然也可以通過我們的另一種靜態構造方法直接建立一個MediaPlayer對象

   Uri uri = Uri                 .parse("http://zhangmenshiting2.baidu.com/data2/music/9138619/9138619.mp3?xcode=dd0d0d0df7218eb9a79c7fd72cefb648&mid=0.18926789458694");    mediaPlayer = MediaPlayer.create(MediaPlayerDemoActivity.this,                 uri);           mediaPlayer.start();

 

實現效果:

 

貼上原始碼:

package com.jiahui.media;import java.io.IOException;public class MediaPlayerDemoActivity extends Activity implementsOnClickListener {private Button btnAppStart, btnAssetsStart, btnSdcardStart,btnNetworkStart;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);btnAppStart = (Button) this.findViewById(R.id.btnAppStart);btnAssetsStart = (Button) this.findViewById(R.id.btnAssetsStart);btnSdcardStart = (Button) this.findViewById(R.id.btnSdcardStart);btnNetworkStart = (Button) this.findViewById(R.id.btnNetworkStart);btnAppStart.setOnClickListener(this);btnAssetsStart.setOnClickListener(this);btnSdcardStart.setOnClickListener(this);btnNetworkStart.setOnClickListener(this);}@Overridepublic void onClick(View v) {MediaPlayer mediaPlayer = null;switch (v.getId()) {case R.id.btnAppStart:System.out.println("---播放應用的資源檔----");// 使用raw下的資源檔建立MediaPlayer對象mediaPlayer = MediaPlayer.create(MediaPlayerDemoActivity.this,R.raw.a1);mediaPlayer.start();break;case R.id.btnAssetsStart:System.out.println("---播放assest的資源檔----");AssetManager assetManager = this.getAssets();try {AssetFileDescriptor fileDescriptor = assetManager.openFd("a2.mp3");mediaPlayer = new MediaPlayer();mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(),fileDescriptor.getStartOffset(),fileDescriptor.getLength());mediaPlayer.prepare();mediaPlayer.start();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}break;case R.id.btnSdcardStart:System.out.println("---播放SDcard上的檔案---");try {mediaPlayer = new MediaPlayer();mediaPlayer.setDataSource("/mnt/sdcard/a3.mp3");mediaPlayer.prepare();mediaPlayer.start();} catch (Exception e) {}break;case R.id.btnNetworkStart:System.out.println("播放網路上的音頻");// http://zhangmenshiting2.baidu.com/data2/music/9138619/9138619.mp3?// xcode=dd0d0d0df7218eb9a79c7fd72cefb648&mid=0.18926789458694try {// mediaPlayer = new MediaPlayer();// 通過Uri解析一個網路地址Uri uri = Uri.parse("http://zhangmenshiting2.baidu.com/data2/music/9138619/9138619.mp3?xcode=dd0d0d0df7218eb9a79c7fd72cefb648&mid=0.18926789458694");mediaPlayer.setDataSource(MediaPlayerDemoActivity.this, uri);// mediaPlayer.prepare();// 也可以直接通過這種方式裝載網路上的音頻檔案mediaPlayer = MediaPlayer.create(MediaPlayerDemoActivity.this,uri);mediaPlayer.start();} catch (Exception e) {// TODO: handle exception}break;default:break;}}}

 

如需轉載引用請註明出處:http://blog.csdn.net/jiahui524

原始碼下載:http://download.csdn.net/detail/jiahui524/3847987

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.