MediaPlayer
播放音頻和視頻的主要API。
AudioManager
管理音頻資源和音頻輸出 。
需要的權限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />:如果應用需要喚醒屏幕或者喚醒進程,或者使用MediaPlayer.setScreenOnWhilePlaying() or MediaPlayer.setWakeMode() methods,方法,需要該權限。
MediaPlayer 可以使用的資源有:
a)本地資源;
b)內部URI(ContentPRovider)
c)外部的URI
使用raw資源的例子
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1); mediaPlayer.start(); // no need to call prepare(); create() does that for youURI 的例子Uri myUri = ....; // initialize Uri hereMediaPlayer mediaPlayer = new MediaPlayer();mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mediaPlayer.setDataSource(getapplicationContext(), myUri);mediaPlayer.prepare();mediaPlayer.start();HTTP 的例子String url = "http://........"; // your URL hereMediaPlayer mediaPlayer = new MediaPlayer();mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mediaPlayer.setDataSource(url);mediaPlayer.prepare(); // might take long! (for buffering, etc)mediaPlayer.start();異步的準備工作:
調用prepare()會花比較長的時間來執行,因為它包括讀取和解碼媒體數據。所以不能在UI主線程來調用該方法?。?!會造成ANR。
避免這種情況,使用另外一個線程來prepare;
使用prepareAsync()方法可以直接完成上面的事情。這個方式在后臺開始準備資源,快速反饋結果。當資源準備好,onPrepared()方法會被調用,該方法在MediaPlayer.OnPreparedListener,中,使用 setOnPreparedListener()可以配置。
final MediaPlayer mMediaPlayer = new MediaPlayer(); mMediaPlayer.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mp.start(); } });mMediaPlayer.prepareAsync();管理狀態
start(), pause(), seekTo(), stop()
使用wake locks(喚醒)
mMediaPlayer = new MediaPlayer();// ... other initialization here ...mMediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);如果使用的的網絡資源文件,還需要使用WifiLockWifiLock wifiLock = ((WifiManager) getSystemService(Context.WIFI_SERVICE)) .createWifiLock(WifiManager.WIFI_MODE_FULL, "mylock");wifiLock.acquire();播放結束后wifiLock.release()播放結束后,清理mMediaPlayer.release();
新聞熱點
疑難解答