【Android笔记】MediaPlayer基本使用方式
Android MediaPlayer基本使用方式
?
使用MediaPlayer播放音頻或者視頻的最簡(jiǎn)單例子:
Java代碼部分:
publicclass MediaPlayerStudy extends Activity {
??? private Button bplay,bpause,bstop;
??? private MediaPlayer mp = new MediaPlayer();
???
??? @Override
??? publicvoid onCreate(Bundle savedInstanceState) {
??????? super.onCreate(savedInstanceState);
??????? setContentView(R.layout.main);
???????
??????? bplay = (Button)findViewById(R.id.play);
??????? bpause = (Button)findViewById(R.id.pause);
??????? bstop = (Button)findViewById(R.id.stop);
??????? bplay.setOnClickListener(new OnClickListener(){
?????????? @Override
?????????? publicvoid onClick(View v) {
????????????????? try {
???????????????????? mp.setDataSource("/sdcard/test.mp3");
???????????????????? mp.prepare();
???????????????????? mp.start();
????????????????? } catch (IllegalArgumentException e) {
???????????????????? e.printStackTrace();
????????????????? } catch (IllegalStateException e) {
???????????????????? e.printStackTrace();
????????????????? } catch (IOException e) {
???????????????????? e.printStackTrace();
????????????????? }
????????????????? mp.setOnCompletionListener(new OnCompletionListener(){
???????????????????? @Override
???????????????????? publicvoid onCompletion(MediaPlayer mp) {
???????????????????????? mp.release();
???????????????????? }
????????????????? });
?????????? }
??????? });
???????
??????? bpause.setOnClickListener(new OnClickListener(){
?????????? @Override
?????????? publicvoid onClick(View v) {
????????????????? if(mp != null){
???????????????????? mp.pause();
????????????????? }
?????????? }
??????? });
????
??? ????bstop.setOnClickListener(new OnClickListener(){
??????? @Override
??????? publicvoid onClick(View v) {
??????? ???? if(mp != null){
??????? ??????? mp.stop();
??????? ???? }
??????? }
??????? });
??? }
?
??? @Override
??? protectedvoid onDestroy() {
?????? if(mp != null)
?????????? mp.release();
?????? super.onDestroy();
??? }
}
?
布局文件main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
??? ??? android:orientation="vertical" android:layout_width="fill_parent"
??? ??? android:layout_height="fill_parent">
??? ??? <TextView android:layout_width="fill_parent"
??? ??? android:layout_height="wrap_content" android:text="@string/hello" />
??? ??? <Button android:text="play" android:id="@+id/play"
??? ??????? android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
??? ??? <Button android:text="pause" android:id="@+id/pause"
??? ??????? android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
?????? <Button android:text="stop" android:id="@+id/stop"
?????? ??? android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
??? </LinearLayout>
?
程序說(shuō)明:
這個(gè)例子只是描述了MediaPlayer的基本使用步驟和方式,MediaPlayer還有多種使用方式和方法,并不只局限于例子所介紹的一種。具體來(lái)看:
1)如何獲得MediaPlayer實(shí)例:
?? 可以使用直接new的方式:
?? MediaPlayer mp = new MediaPlayer();
?? 也可以使用create的方式,如:
MediaPlayer mp = MediaPlayer.create(this, R.raw.test);//這時(shí)就不用調(diào)用setDataSource了
?
2) 如何設(shè)置要播放的文件:
?? MediaPlayer要播放的文件主要包括3個(gè)來(lái)源:
a. 用戶在應(yīng)用中事先自帶的resource資源
?? 例如:MediaPlayer.create(this, R.raw.test);
b. 存儲(chǔ)在SD卡或其他文件路徑下的媒體文件
例如:mp.setDataSource("/sdcard/test.mp3");
c. 網(wǎng)絡(luò)上的媒體文件
?? 例如:mp.setDataSource("http://www.citynorth.cn/music/confucius.mp3");
?
MediaPlayer的setDataSource一共四個(gè)方法:
?????? setDataSource (String path)
?????? setDataSource (FileDescriptor fd)
?????? setDataSource (Context context, Uri uri)
?? setDataSource (FileDescriptor fd, long offset, long length)
?
3)對(duì)播放器的主要控制方法:
Android通過(guò)控制播放器的狀態(tài)的方式來(lái)控制媒體文件的播放,其中:
prepare()和prepareAsync()? 提供了同步和異步兩種方式設(shè)置播放器進(jìn)入prepare狀態(tài),需要注意的是,如果MediaPlayer實(shí)例是由create方法創(chuàng)建的,那么第一次啟動(dòng)播放前不需要再調(diào)用prepare()了,因?yàn)?/span>create方法里已經(jīng)調(diào)用過(guò)了。
start()是真正啟動(dòng)文件播放的方法,
pause()和stop()比較簡(jiǎn)單,起到暫停和停止播放的作用,
seekTo()是定位方法,可以讓播放器從指定的位置開始播放,需要注意的是該方法是個(gè)異步方法,也就是說(shuō)該方法返回時(shí)并不意味著定位完成,尤其是播放的網(wǎng)絡(luò)文件,真正定位完成時(shí)會(huì)觸發(fā)OnSeekComplete.onSeekComplete(),如果需要是可以調(diào)用setOnSeekCompleteListener(OnSeekCompleteListener)設(shè)置監(jiān)聽(tīng)器來(lái)處理的。
release()可以釋放播放器占用的資源,一旦確定不再使用播放器時(shí)應(yīng)當(dāng)盡早調(diào)用它釋放資源。
reset()可以使播放器從Error狀態(tài)中恢復(fù)過(guò)來(lái),重新會(huì)到Idle狀態(tài)。
?
?
4)設(shè)置播放器的監(jiān)聽(tīng)器:
?? MediaPlayer提供了一些設(shè)置不同監(jiān)聽(tīng)器的方法來(lái)更好地對(duì)播放器的工作狀態(tài)進(jìn)行監(jiān)聽(tīng),以期及時(shí)處理各種情況,
如: setOnCompletionListener(MediaPlayer.OnCompletionListener listener)、
setOnErrorListener(MediaPlayer.OnErrorListener listener)等,設(shè)置播放器時(shí)需要考慮到播放器可能出現(xiàn)的情況設(shè)置好監(jiān)聽(tīng)和處理邏輯,以保持播放器的健壯性。
總結(jié)
以上是生活随笔為你收集整理的【Android笔记】MediaPlayer基本使用方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 不等待输入_明明显示“对方正在输入”却总
- 下一篇: 安卓服务Service详解