【移动应用开发技术】Android MediaPlayer如何实现播放音频的方式_第1页
【移动应用开发技术】Android MediaPlayer如何实现播放音频的方式_第2页
【移动应用开发技术】Android MediaPlayer如何实现播放音频的方式_第3页
【移动应用开发技术】Android MediaPlayer如何实现播放音频的方式_第4页
【移动应用开发技术】Android MediaPlayer如何实现播放音频的方式_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】AndroidMediaPlayer如何实现播放音频的方式

在下给大家分享一下AndroidMediaPlayer如何实现播放音频的方式,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!主要介绍使用MediaPlayer播放音频的方式。关于MediaPlayer的基础知识,比如状态,可以参考AndroidMediaPlayer基础简介。为了方便表达,定义变量名为mediaPlayer。MediaPlayer的使用方式创建MediaPlayer可以直接newMediaPlayer,也可以用MediaPlayer提供的create方法创建。mediaPlayer=newMediaPlayer();使用create方法创建成功后,mediaPlayer处于Prepared状态。可以直接start播放。mediaPlayer

=

MediaPlayer.create(getApplicationContext(),

Uri.fromFile(file));

mediaPlayer.start();设置音源-setDataSource通过调用setDataSource来设置音源。setDataSource有多个重载方法,我们来看常用的几种。例如设置使用assets里的资源。实际情况可能需要trycatch。AssetFileDescriptor

fd

=

null;

MediaPlayer

mediaPlayer

=

new

MediaPlayer();

fd

=

context.getApplicationContext().getAssets().openFd(name);

mediaPlayer.setDataSource(fd.getFileDescriptor(),

fd.getStartOffset(),

fd.getLength());本地文件,需要文件的绝对路径。mediaPlayer.setDataSource(file.getAbsolutePath());或者获取文件的Uri来创建mediaPlayer。mediaPlayer

=

MediaPlayer.create(getApplicationContext(),

Uri.fromFile(file));设置网络音频,也是用setDataSource方法,设置url。mediaPlayer.setDataSource("/sample.mp3"));播放网络音频时,如果使用的是http,有可能会报错java.io.IOException:

Cleartext

HTTP

traffic

to

not

permitted可以简单地设置一下manifest,设置usesCleartextTraffic=”true”<application

android:usesCleartextTraffic="true">准备-prepare同步和异步准备音频资源。prepareAsync()是异步的方式,prepare是同步的。注意线程调度问题,同时不要阻塞UI线程。使用异步方式准备音频,经常与MediaPlayer.OnPreparedListener监听器配合使用。异步准备时,也可以进行其他的设置。mediaPlayer.prepareAsync();

mediaPlayer.setOnPreparedListener(new

MediaPlayer.OnPreparedListener()

{

@Override

public

void

onPrepared(MediaPlayer

mediaPlayer)

{

mediaPlayer.start();

//

准备好了就播放

}

});循环播放-Looping设置循环播放setLooping。mediaPlayer.setLooping(true);播放完毕后,不会回调OnCompletionListener,而是从头播放当前音频。播放-start播放音频,调用start方法。mediaPlayer.start();处于Prepared,Pause和PlaybackComplete状态时,可以调用start方法,进入Started状态。暂停-pause暂停播放,使用pause方法。在暂停前先判断一下mediaPlayer的是否在播放。if

(mediaPlayer.isPlaying())

{

mediaPlayer.pause();

}暂停成功则处于Paused状态。停止-stop回顾一下MediaPlayer状态切换的图示,我们可以得知在播放中,暂停,播放完成这3个状态下,可以调用stop方法,进入Stopped状态。mediaPlayer.stop();调进度-seekTo调整播放进度。我们平时使用音乐播放软件一般都会有这个功能。seekTo方法接受一个毫秒参数。int

targetMS

=

(int)

(percent

*

mediaPlayer.getDuration());

mediaPlayer.seekTo(targetMS);seekTo并不会改变MediaPlayer的状态。int

targetMS

=

(int)

(percent

*

mediaPlayer.getDuration());

mediaPlayer.seekTo(targetMS);reset后的mediaPlayer进入Idle状态。需要重新设置音源与准备。释放-release不再使用这个mediaPlayer时,应当尽快释放掉,以释放相关的资源。调用release后,mediaPlayer进入End状态。此时这个mediaPlayer就不能再使用了。常用监听器缓冲监听器OnBufferingUpdateListener比如我们加载网络音频的时候,常用这个监听器来监听缓冲进度。显示缓冲进度,也可以提高用户体验。mMediaPlayer.prepareAsync();

mMediaPlayer.setOnBufferingUpdateListener(new

MediaPlayer.OnBufferingUpdateListener()

{

@Override

public

void

onBufferingUpdate(MediaPlayer

mp,

int

percent)

{

//

percent代表缓冲百分比

}

});错误监听器OnErrorListenermediaPlayer.setOnErrorListener(new

MediaPlayer.OnErrorListener()

{

@Override

public

boolean

onError(MediaPlayer

mediaPlayer,

int

i,

int

i1)

{

return

true;

//

返回true表示在此处理错误,不会回调onCompletion

}

});注意onError的返回值。可以选择自己处理error。

*

@return

True

if

the

method

handled

the

error,

false

if

it

didn't.

*

Returning

false,

or

not

having

an

OnErrorListener

at

all,

will

*

cause

the

OnCompletionListener

to

be

called.

*/

boolean

onError(MediaPlayer

mp,

int

what,

int

extra);播放完毕监听器OnCompletionListenermediaPlayer.setOnCompletionListener(new

MediaPlayer.OnCompletionListener()

{

@Override

public

void

onCompletion(MediaPlayer

mediaPlayer)

{

//

播放完毕

}

});使用示例播放assets里的音频播放assets里的音频文件,使用到AssetFileDescriptor类。使用后记得关闭AssetFileDescriptor。private

void

playAssetsAudio(final

String

name,

Context

context)

{

Log.d(TAG,

"playAssetWordSound:

try

to

play

assets

sound

file.

->

"

+

name);

AssetFileDescriptor

fd

=

null;

try

{

MediaPlayer

mediaPlayer;

Log.v(TAG,

"Looking

in

assets.");

fd

=

context.getApplicationContext().getAssets().openFd(name);

mediaPlayer

=

new

MediaPlayer();

mediaPlayer.reset();

mediaPlayer.setDataSource(fd.getFileDescriptor(),

fd.getStartOffset(),

fd.getLength());

mediaPlayer.prepareAsync();

mediaPlayer.setOnPreparedListener(new

MediaPlayer.OnPreparedListener()

{

@Override

public

void

onPrepared(MediaPlayer

mediaPlayer)

{

Log.d(TAG,

"onPrepared:

"

+

name);

mediaPlayer.start();

}

});

mediaPlayer.setOnCompletionListener(new

MediaPlayer.OnCompletionListener()

{

@Override

public

void

onCompletion(MediaPlayer

mp)

{

mp.release();

Log.d(TAG,

"onCompletion:

"

+

name);

}

});

mediaPlayer.setOnErrorListener(new

MediaPlayer.OnErrorListener()

{

@Override

public

boolean

onError(MediaPlayer

mp,

int

i,

int

i1)

{

mp.release();

return

true;

}

});

}

catch

(Exception

e)

{

try

{

if

(fd

!=

null)

{

fd.close();

}

}

catch

(Exception

e1)

{

Log.e(TAG,

"Exception

close

fd:

",

e1);

}

}

finally

{

if

(fd

!=

null)

{

try

{

fd.close();

}

catch

(IOException

e)

{

Log.e(TAG,

"Finally,

close

fd

",

e);

}

}

}

}播放本地音频文件尝试播放音频文件。仅播放一次。private

void

playAudioFile(final

File

file)

{

Log.d(TAG,

"playAudioFile:

"

+

file.getAbsolutePath());

MediaPlayer

mediaPlayer;

try

{

mediaPlayer

=

new

MediaPlayer();

mediaPlayer.setLooping(false);

mediaPlayer.setDataSource(file.getAbsolutePath());

mediaPlayer.prepare();

mediaPlayer.start();

mediaPlayer.setOnCompletionListener(new

MediaPlayer.OnCompletionListener()

{

@Override

public

void

onCompletion(MediaPlayer

mp)

{

mp.release();

}

});

mediaPlayer.setOnErrorListener(new

MediaPlayer.OnErrorListener()

{

@Override

public

boolean

onError(MediaPlayer

mediaPlayer,

int

i,

int

i1)

{

Log.d(TAG,

"Play

local

sound

onError:

"

+

i

+

",

"

+

i1);

return

true;

}

});

}

catch

(Exception

e)

{

Log.e(TAG,

"playAudioFile:

",

e);

}

}播放在线音频设置url,播放在线音频private

void

playOnlineSound(String

soundUrlDict)

{

try

{

MediaPlayer

mediaPlayer

=

new

MediaPlayer();

mediaPlayer.setDataSource(soundUrlDict);

mediaPlayer.prepareAsync();

mediaPlayer.setOnPreparedListener(new

M

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论