android播放mp3方法,Android之MediaPlayer播放音频与视频
本節(jié)帶來(lái)的是Android多媒體中的——MediaPlayer,我們可以通過(guò)這個(gè)API來(lái)播放音頻和視頻 該類是Androd多媒體框架中的一個(gè)重要組件,通過(guò)該類,我們可以以最小的步驟來(lái)獲取,解碼 和播放音視頻。它支持三種不同的媒體來(lái)源:
本地資源
內(nèi)部的URI,比如你可以通過(guò)ContentResolver來(lái)獲取
外部URL(流) 對(duì)于Android所支持的的媒體格式列表
使用MediaPlayer播放音頻:
1)獲得MediaPlayer實(shí)例:
MediaPlayer mp = new MediaPlayer();
MediaPlayer mp = MediaPlayer.create(this, R.raw.test); //無(wú)需再調(diào)用setDataSource
另外create還有這樣的形式: create(Context context, Uri uri, SurfaceHolder holder) 通過(guò)Uri和指定 SurfaceHolder 【抽象類】 創(chuàng)建一個(gè)多媒體播放器
2)設(shè)置播放文件:
//①raw下的資源:
MediaPlayer.create(this, R.raw.test);
//②本地文件路徑:
mp.setDataSource("/sdcard/test.mp3");
//③網(wǎng)絡(luò)URL文件:
mp.setDataSource("http://www.xxx.com/music/test.mp3");
另外setDataSource()方法有多個(gè),里面有這樣一個(gè)類型的參數(shù):FileDescriptor,在使用這個(gè) API的時(shí)候,需要把文件放到res文件夾平級(jí)的assets文件夾里,然后使用下述代碼設(shè)置DataSource:
AssetFileDescriptor fileDescriptor = getAssets().openFd("rain.mp3");
m_mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(),fileDescriptor.getStartOffset(), fileDescriptor.getLength());
3)其他方法
Paste_Image.png
實(shí)例
//[1]初始化mediaplayer
MediaPlayer mediaPlayer = new MediaPlayer();
//[2]設(shè)置要播放的資源位置 path 可以是網(wǎng)絡(luò) 路徑 也可是本地路徑
try {
mediaPlayer.setDataSource("/mnt/sdcard/xpg.mp3");
//[3]準(zhǔn)備播放
mediaPlayer.prepare();
//[4]開(kāi)始播放
mediaPlayer.start();
} catch (Exception e) {
e.printStackTrace();
}
本地Uri:
Uri myUri = ....; // initialize Uri here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(getApplicationContext(), myUri);
mediaPlayer.prepare();
mediaPlayer.start();
網(wǎng)絡(luò)音頻
String url = "http://........"; // your URL here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(url);
mediaPlayer.prepare(); // might take long! (for buffering, etc)
mediaPlayer.start();
使用MediaPlayer播放視頻:
MediaPlayer主要用于播放音頻,沒(méi)有提供圖像輸出界面,所以我們需要借助其他的 組件來(lái)顯示MediaPlayer播放的圖像輸出,我們可以使用用SurfaceView 來(lái)顯示,下面我們使用SurfaceView來(lái)寫(xiě)個(gè)視頻播放的例子:
//[0]找到控件用來(lái)顯示播放視頻的內(nèi)容
final SurfaceView sfv = (SurfaceView) findViewById(R.id.sfv);
//獲取holder 對(duì)象 用來(lái)維護(hù)視頻播放的內(nèi)容
SurfaceHolder holder = sfv.getHolder();
//[0.1]添加holder 生命周期 方法
holder.addCallback(new Callback() {
//當(dāng)surface view 銷毀
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
System.out.println("surfaceDestroyed");
//停止播放視頻
if (mediaPlayer!=null && mediaPlayer.isPlaying()) {
//獲取到當(dāng)前播放視頻的位置
currentPosition = mediaPlayer.getCurrentPosition();
mediaPlayer.stop();
}
}
//這個(gè)方法執(zhí)行了 說(shuō)明sufaceView準(zhǔn)備好了
@Override
public void surfaceCreated(SurfaceHolder holder) {
//[1]初始化mediaplayer
System.out.println("surfaceCreated");
mediaPlayer = new MediaPlayer();
//[2]設(shè)置要播放的資源位置 path 可以是網(wǎng)絡(luò) 路徑 也可是本地路徑
try {
mediaPlayer.setDataSource("http://192.168.11.86:8080/cc.MP4");
//[3]準(zhǔn)備播放
mediaPlayer.prepareAsync();
//[3.0]設(shè)置顯示給sfv sufraceholder 是用來(lái)維護(hù)視頻播放的內(nèi)容
mediaPlayer.setDisplay(holder);
//[3.1]設(shè)置一個(gè)準(zhǔn)備完成的監(jiān)聽(tīng)
mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
//[4]開(kāi)始播放
mediaPlayer.start();
//[5]繼續(xù)上次的位置繼續(xù)播放
mediaPlayer.seekTo(currentPosition);
}
});
} catch (Exception e) {
e.printStackTrace();}}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
});
使用VideoView播放視頻
// 插件vitamio框架檢查是否可用
if (!LibsChecker.checkVitamioLibs(this)) {
return;
}
final VideoView vv = (VideoView) findViewById(R.id.vv);
vv.setVideoPath("http://192.168.11.86:8080/aa.avi");
vv.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
vv.start();
}
});
//設(shè)置video的控制器
vv.setMediaController(new MediaController(this));
總結(jié)
以上是生活随笔為你收集整理的android播放mp3方法,Android之MediaPlayer播放音频与视频的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: android wifi定位服务,如何在
- 下一篇: 一套代码编译出ios和android,H