編輯:關於Android編程
Android多媒體框架包含了獲取和回放音頻,視頻和各種類形的圖像的功能,所以你可以很容易的把它們整合到你的應用中.你可以從存儲在資源中的文件,文件系統中的文件,或從網絡數據流中播放音頻或視頻,這些都是用MediaPlayer或JetPlayerAPI實現.你也可以使用MediaRecorderand Camera API來錄制聲音,視頻或抓取圖片.
下面的主題向你演示了如何使用Android框架來實現多媒體獲取和回放.
MediaPlayer
如何在你的應用中播放音視頻.
JetPlayer
如何使用通過JetCreator創建的內容播放交互式的音視頻.
Camera
如何在你的應用中使用一個設備上的相機獲取圖片和視頻.
AudioCapture
如何在你的應用中錄制聲音.
媒體回放
Android多媒體框架支持播放很多常見的媒體類型,所以你可以使用MediaPlayerAPI很輕松的整合音視頻和圖像到你的應用中.你可以從資源中,從文件中,從網絡上播放音視頻.
此文檔向你演示了如何寫一個媒體播放應用,如何與用戶和系統交互,從而獲得最好的性能和用戶體驗.
注:你只能把音視頻播放到標准的輸出設備上.當前,它們是揚聲器或藍牙耳機.你不能在電話通話時播放音頻文件.
基礎
以下類被用於播放音頻和視頻:
MediaPlayer
此類是播放音視頻的主要API.
AudioManager
此類管理設備上的音頻源和輸出.
Manifest聲明
在使用MediaPlayer開發之前,確保你的manifest中聲明了允許使用的相關特性.
InternetPermission - 如果你使用MediaPlayer來播放網絡流中的內容,你的應用必須請求網絡存取權限.
<uses-permissionandroid:name="android.permission.INTERNET" />
WakeLock Permission -如果你的播放應用需要阻止屏幕變暗或阻止處理器睡眠,或使用MediaPlayer.setScreenOnWhilePlaying()或MediaPlayer.setWakeMode()方法,你必須請求此權限.
<uses-permissionandroid:name="android.permission.WAKE_LOCK" />
使用MediaPlayer
媒體框架中最重要的組件之一就是MediaPlayer類.此類的對象可以用少量的設置即能獲取,解碼和播放音視頻.它支持多種媒體源,比如:
本地資源.
內部URI,比如你從ContentResolver取得的URI.
外部URI(流媒體)
要了解Android支持的媒體類型列表,請看AndroidSupported Media Formats 文檔.
下面是如何播放本地資源中的音頻的例子(保存在你的應用的res/raw/文件夾下):
[java]
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
mediaPlayer.start(); //不需要調用prepare(); create()為你做了
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
mediaPlayer.start(); //不需要調用prepare(); create()為你做了
在例子中,"raw"資源是一個系統不會以某種方式進行分析的文件.然而,此資源的內容不能是原始音頻,它應是一種適當編碼和格式化的媒體文件(當然是被支持的格式).
以下是如何播放一個本地URI的例子(URI是你用ContentResolver獲取的):
[java]
Uri myUri = ....; // initialize Uri here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(getApplicationContext(), myUri);
mediaPlayer.prepare();
mediaPlayer.start();
Uri myUri = ....; // initialize Uri here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(getApplicationContext(), myUri);
mediaPlayer.prepare();
mediaPlayer.start();
從一個基於HTTP流的的遠程URL播放看起來是這樣的
[java]
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();
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();
注:如果你傳入了一個URL來流式播放一個在線文件,這個文件必須前進式下載progressivedownload.
警告:當使用setDataSource()時你必須捕獲和傳遞IllegalArgumentException和IOException,因為你引用的文件可能不存在.
異步Preparation
使用MediaPlayer,在其本質上來說可以是簡單直接的.然而,對於一個典型android應用來說還有一些重要的事情要記住.例如,prepare()調用可能耗時很常,因為它可能需要獲取並打開解碼媒體數據.所以,由於有些方法會執行很長時間,那麼你就不能從你的應用的UI線程中調用它.否則會導致UI掛起,直到此方法返回為止.這是很差勁的用戶體驗,還會導致一個ANR(應用沒有反應)錯誤.即使你認為你的資源加載的很快,但記住界面中任何耗時超過10秒的東西將導致一個顯著的暫停並使用戶對你的應用產生慢的印像.
要避免掛起UI線程,應產生另外的線程來"prepare"MediaPlayer並且在完成時通知主線程.然而,色雖然你可以親自寫線程中的邏輯,但是更常用的是使用框架所提供的一個方便的途徑:使用prepareAsync().此方法在後台開始"准備"過程並立即返回.當媒體"准備"完成,MediaPlayer.OnPreparedListener的onPrepared()方法(通過setOnPreparedListener()設置的)被調用.
管理狀態
對MediaPlayer要記住的另一個方面就是"基於狀態".即,MediaPlayer有一個內部的狀態,因為特定的操作只能在特定的狀態時才有效,所以你必須在寫代碼時一直注意到它的變化.如果你在錯誤的狀態下執行一個操作,系統可能拋出一個異常或導致一個意外的行為.
MediaPlayer類文檔中展示了一個完整的狀態圖例,它闡明了哪個方法使MediaPlayer從一個狀態進入另一個狀態.例如,當你創建一個新的MediaPlayer,它處於Idle狀態.此時,你應調用setDataSource()初始化它,使它進入"已初始化"狀態.之後,你應使用prepare()或prepareAsync()"准備"它.當MediaPlayer准備完成,它將進入Prepared狀態,這表示你可以調用start()來播放了.此時,如圖表所示,你可以調用start(),pause(),和seekTo()以及其它一些方法使MediaPlayer的狀態在Started,Paused和PlaybackCompleted狀態之間轉換.當你調了stop(),注意你不能再調用start(),除非你重新prepare MediaPlayer.
當你寫代碼與MediaPlayer交互時,要時刻記住MediaPlayer的狀態變化圖,因為在錯誤的狀態下調用它的方法是常見的bug的原因.
作者:nkmnkm
現在微信基本上人人都會用,也極大的方便了我們的生活各方面,那麼平時我們微信的聊天語音要怎麼轉發出去給別人呢?下面就請看小編給大家帶來的微信語音轉發教程方法吧
Android Dialog 對話框 1、Dialog介紹 2、AlertDialog的基本使用 3、自定義對話框 Custom Dialog一、Dialog介紹 Dia
微信接入支付流程跟支付寶差不多,這裡介紹一下接入流程以及注意事項。接入流程:1.1、到微信開放平台添加移動應用,申請權限到微信開放平台注冊開發者賬號,並添加應用,申請支付
隨著蘋果向iPhone6以上的機型推送VoLTE高清語音通話運營商配置更新文件,更多網友開始關注這一新的語音技術,那麼現在國內有哪些手機是支持VoLTE高清