Android 中級教程之------Android MediaPlayer播放mp3的例項!
Android 中級教程之——Android MediaPlayer播放mp3的例項!
大家好我們今天研究的是Android中很重要也最為複雜的媒體播放器—MediaPlayer.
Android的MediaPlayer包含了Audio和video的播放功能,在Android的介面上,Music和Video兩個應用程式都是呼叫MediaPlayer實現的。
MediaPlayer在底層是基於OpenCore(PacketVideo)的庫實現的,為了構建一個MediaPlayer程式,上層還包含了程序間通訊等內容,這種程序間通訊的基礎是Android基本庫中的Binder機制。
而我們今天的例子只是利用MediaPlayer來播放res/raw資料夾中一首非常動聽的英文哥love fool.mp3.程式有三個ImageButton按鈕,播放,停止,和暫停!三個按鈕的功能我就不用多說.下面我將Step By Step教你如何完成本Demo的實現.
Step 1 :新建一個Android工程,命名為MediaPlayerDemo.
Step 2 :準備素材,在res下建一個raw資料夾,將foollove.mp3匯入,將play.png,pause.png,及stop.png匯入res/drawable資料夾下.
Step 3: 設計UI佈局,在main.xml裡放入三個ImageButton(這裡可以用AbsoluteLayout,或者RelativeLayout實現,我用後者).程式碼如下:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/white" xmlns:android="http://schemas.android.com/apk/res/android " > <TextView android:id="@+id/myTextView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" > </TextView> <ImageButton android:id="@+id/myButton1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/play" android:layout_below="@+id/myTextView1" > </ImageButton> <ImageButton android:id="@+id/myButton3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/pause" android:layout_alignTop="@+id/myButton1" android:layout_toRightOf="@+id/myButton1" > </ImageButton> <ImageButton android:id="@+id/myButton2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/stop" android:layout_alignTop="@+id/myButton1" android:layout_toRightOf="@+id/myButton3" > </ImageButton> </RelativeLayout>
Step 4 :主控制程式MediaPlayerDemo.java的實現,程式碼如下:
package com.android.test; import android.app.Activity; import android.media.MediaPlayer; import android.os.Bundle; import android.view.View; import android.widget.ImageButton; import android.widget.TextView; public class MediaPlayerDemo extends Activity { private ImageButton mb1,mb2,mb3; private TextView tv; private MediaPlayer mp; //宣告一個變數判斷是否為暫停,預設為false private boolean isPaused = false; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //通過findViewById找到資源 mb1 = (ImageButton)findViewById(R.id.myButton1); mb2 = (ImageButton)findViewById(R.id.myButton2); mb3 = (ImageButton)findViewById(R.id.myButton3); tv = (TextView)findViewById(R.id.myTextView1); //建立MediaPlayer物件,將raw資料夾下的lovefool.mp3 mp = MediaPlayer.create(this,R.raw.lovefool); //增加播放音樂按鈕的事件 mb1.setOnClickListener(new ImageButton.OnClickListener(){ @Override public void onClick(View v) { try { if(mp != null) { mp.stop(); } mp.prepare(); mp.start(); tv.setText("音樂播放中..."); } catch (Exception e) { tv.setText("播放發生異常..."); e.printStackTrace(); } } }); mb2.setOnClickListener(new ImageButton.OnClickListener(){ @Override public void onClick(View v) { try { if(mp !=null) { mp.stop(); tv.setText("音樂停止播放..."); } } catch (Exception e) { tv.setText("音樂停止發生異常..."); e.printStackTrace(); } } }); mb3.setOnClickListener(new ImageButton.OnClickListener(){ @Override public void onClick(View v) { try { if(mp !=null) { if(isPaused==false) { mp.pause(); isPaused=true; tv.setText("停止播放!"); } else if(isPaused==true) { mp.start(); isPaused = false; tv.setText("開始播發!"); } } } catch (Exception e) { tv.setText("發生異常..."); e.printStackTrace(); } } }); /* 當MediaPlayer.OnCompletionLister會執行的Listener */ mp.setOnCompletionListener( new MediaPlayer.OnCompletionListener() { // @Override /*覆蓋檔案播出完畢事件*/ public void onCompletion(MediaPlayer arg0) { try { /*解除資源與MediaPlayer的賦值關係 * 讓資源可以為其它程式利用*/ mp.release(); /*改變TextView為播放結束*/ tv.setText("音樂播發結束!"); } catch (Exception e) { tv.setText(e.toString()); e.printStackTrace(); } } }); /* 當MediaPlayer.OnErrorListener會執行的Listener */ mp.setOnErrorListener(new MediaPlayer.OnErrorListener() { @Override /*覆蓋錯誤處理事件*/ public boolean onError(MediaPlayer arg0, int arg1, int arg2) { // TODO Auto-generated method stub try { /*發生錯誤時也解除資源與MediaPlayer的賦值*/ mp.release(); tv.setText("播放發生異常!"); } catch (Exception e) { tv.setText(e.toString()); e.printStackTrace(); } return false; } }); } }
Step 5: 執行效果如下,一首動聽的love fool在播放…享受中…
擴散學習:
如果我們想播放手機卡里的音樂,或者URL下載流媒體來播放,示意程式如下:
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(String URL/FILE_PATH);
mp.prepare();
mp.start();
以上程式主要是通過MediaPlayer.setDataSource() 的方法,將URL或檔案路徑以字串的方式傳入.使用setDataSource ()方法時,要注意以下三點:
1.構建完成的MediaPlayer 必須實現Null 對像的檢查.
2.必須實現接收IllegalArgumentException 與IOException 等異常,在很多情況下,你所用的檔案當下並不存在.
3.若使用URL 來播放線上媒體檔案,該檔案應該要能支援pragressive 下載.
相關推薦
Android 中級教程之------Android MediaPlayer播放mp3的例項!
Android 中級教程之——Android MediaPlayer播放mp3的例項! 大家好我們今天研究的是Android中很重要也最為複雜的媒體播放器—MediaPlayer. Android的MediaPlayer包含了Audio和video的播放
Android中級教程之--------Android應用程式的生命週期(一定要理解,面試會問的哦!)
Android的應用程式的生命週期,我相信這在以後的Android面試一定是經常考的題目,所以大家一點要重視哦!下面我將圖文雙執行緒,希望對大家有一點幫助! 首先我們看一下Android應用程式的生命週期圖: 在大部份情況下,每個Android應用都
Android系列教程之七:EditText使用詳解-包含很多教程上看不到的功能演示
Android系列教程目錄: 一:新建HelloEditText工程 新建一個Hello world詳細步驟可以參見 建立設定如下: Project name:HelloEditTextBuild Target :android 2.2Application name
android開發教程之startActivityForResult使用方法
最近做的一個小東西遇到這樣的情況,我從一個頁面MainActivity修改一些內容,需要跳轉到一個新的EditActivity去做修改操作,修改完成後就回到之前的MainActivity,因為資訊被修改了,最好還是從伺服器上重新獲取一下,那麼就要在MainActivity裡
Android疑難雜症之(ImageView播放gif遇到的坑)
最近做專案需要用到gif圖片,專案中直接用的Glide的gif載入,還沒有時間去研究Glide的原始碼的,不得不說Glide很強大啊,以前在郭神的部落格中看到了一個播放Gif的ImageView,於是打算跟著敲一遍咯。 原文連結先附上:http://blog.
Android高手進階教程之---Android中幾種影象特效處理的集錦!!
大家好,這一節給大家分享的是Android中幾種影象特效處理的小技巧,比如圓角,倒影,還有就是圖片縮放,Drawable轉化為Bitmap,Bitmap轉化為Drawable等等. 廢話少說了,直接講解今天的例項,本例主要是先獲取桌布(getWallpaper()),然後對
Android中級篇之Fresco-載入圖片基礎[詳細圖解Fresco的使用]
常見問題: 初次使用,我們就先簡單書寫我們的 activity_main.xml : <code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing
Android直播開發之旅(4):MP3編碼格式分析與lame庫編譯封裝
轉載請宣告出處:http://blog.csdn.net/andrexpert/article/77683776 一、Mp3編碼格式分析 MP3,全稱MPEG Audio Layer3,是一種高效的計算機音訊編碼方案,它以較大的壓縮比(1:10至1:12)將音
Android Camera2教程之開啟相機、開啟預覽、實現PreviewCallback、拍照
Android API 21新增了Camera2,這與之前的camera架構完全不同,使用起來也比較複雜,但是功能變得很強大。
Android常見錯誤之android widget LinearLayout 4375f248 that was or
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Android面試系列之Android基礎知識
這兩天就要換工作了,為了拿到offer,是時候來一波面試準備了!希望自己能找到心儀的工作。也希望這篇部落格能幫助到大家。 本篇部落格是相對基礎的知識,雖然是基礎,但是很重要,你能保證你都記住了麼? Activity相關 Activity是四大元件之一,
Android基礎篇之Android快速入門--你必須要知道的基礎
1. Activity的理解: 2. Intent的理解 關於IntentFilter 3. Intent的使用:(建立、攜帶資料、讀取資料) 1.建立: 顯式意圖: Intent intent = new Inten
Android自學筆記之 Android五大布局之線性佈局的功能、常用屬性、用法
1.介紹: 線性佈局管理器對存放其中的控制元件或佈局採用線性方式管理 2.LinearLayout的常用屬性android:orientation = “vertical” —— 該屬性決定它子類
Android ORM 框架之 Android中ORMLite應用基礎
ORMLite是常用的一個ORM框架,她不止可以用在Android的sqlite資料庫,也可以使用她操作其他常見的資料庫。這兒是根據官方文件抽取來的android用法。 一,新增依賴 匯入ormlite-core.jar和ormlite-android.
Android架構分析之Android訊息處理機制(二)
作者:劉昊昱 Android版本:4.4.2 在上一篇文章中我們看了一個使用Handler處理Message訊息的例子,本文我們來分析一下其背後隱藏的Android訊息處理機制。 我們可能比較熟悉Windows作業系統的訊息處理模型: while(GetMessage
Android Service的使用方法 音樂播放器例項
Service翻譯成中文是服務,熟悉Windows 系統的同學一定知道很熟悉了。Android裡的Service跟Windows裡的Service功能差不多,就是一個不可見的程序在後臺執行,避免被使
Android應用安全之Android APP通用型拒絕服務漏洞
0xr0ot和Xbalien交流所有可能導致應用拒絕服務的異常型別時,發現了一處通用的本地拒絕服務漏洞。該通用型本地拒絕服務可以造成大面積的app拒絕服務。 針對序列化物件而出現的拒絕服務主要是由於應用中使用了getSerializableExtra() 的API,由於應用開發者沒有對
Android開發者福利之--------Android 5.0 API
Android 5.0 API Android 5.0 (LOLLIPOP) 為使用者和應用開發者提供了新功能。本文旨在介紹其中最值得關注的新 API。 如果您有已釋出的應用,請務必看一看 Android 5.0 行為變更,瞭解您的應用應該考慮的變化。即使您不使用
【Android休眠】之Android休眠機制
一、休眠概述 休眠,簡而言之就是裝置在不需要工作的時候把一些部件、外設關掉(掉電或讓它進入低功耗模式)。 為什麼要休眠呢?一言以蔽之:省電。 休眠分主動休眠和被動休眠。主動休眠:比如我電腦不用了,就通過設定讓系統進入休眠模式;被動休眠:系統檢測到自己閒的慌,為了節約故,自
Android開發規範之------Android 資原始檔命名與使用
以下主要引用阿里巴巴 Android 開發手冊: Android 資原始檔命名與使用: 【推薦】資原始檔需帶模組字首。 【推薦】layout 檔案的命名方式。 Activity 的 layout 以 module_activity 開頭 Fragment 的 la