編輯:關於Android編程
第一個參數是當前上下文,第二個參數為需要加鎖的狀態,被設定為int類型的常量,定義在PowerManager這個final類中。PowerManager是專門用來管理Android功率消耗的鎖定狀態,與鎖定CUP相關的,有四種,分別設定CUP、屏幕、鍵盤等的各種保持喚醒的狀態,在這裡只需要設定為PARTIAL_WAKE_LOCK即可。
mediaPlayer = new MediaPlayer(); // 設定CUP鎖定 mediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);一般對於鎖而言,鎖定了通常需要解鎖,但是這裡的喚醒說與MediaPlayer關聯,所以只需要在使用完之後release()釋放MediaPlayer即可,無需顯式的為其解鎖。在使用setWakeMode設定喚醒鎖的時候,還必須為應用賦予相應的權限:
再來說說如何鎖定wifi硬件在系統睡眠的時候保持正常運行。wifi鎖通過WifiLock進行操作,而WifiLock通過WifiManager進行管理,通過WifiManager.createWifiLock()進行Wifi鎖定。
wifiLock= ((WifiManager) getSystemService(this.WIFI_SERVICE)).createWifiLock(WifiManager.WIFI_MODE_FULL, "mylock"); wifiLock.acquire();當然,在應用中把Wifi鎖定之後,還需要在MediaPlayer.release()的時候為wifi硬件解鎖,為避免意外關閉的情況,最好在Android組件的onDestory()裡對其進行釋放,釋放Wifi鎖使用WifiLock.release()。
/** * 停止播放 */ protected void stop() { if (mediaPlayer != null && mediaPlayer.isPlaying()) { mediaPlayer.stop(); mediaPlayer.release(); mediaPlayer = null; // 釋放wifi鎖 wifiLock.release(); btn_play.setEnabled(true); Toast.makeText(this, "停止播放", 0).show(); } } @Override protected void onDestroy() { // 在activity結束的時候回收資源 if (mediaPlayer != null && mediaPlayer.isPlaying()) { mediaPlayer.stop(); mediaPlayer.release(); mediaPlayer = null; // 釋放wifi鎖 wifiLock.release(); } super.onDestroy(); }
audioManager = (AudioManager) getSystemService(this.AUDIO_SERVICE); int result = audioManager.requestAudioFocus( new OnAudioFocusChangeListener() { @Override public void onAudioFocusChange(int focusChange) { switch (focusChange) { case AudioManager.AUDIOFOCUS_GAIN: // 獲得音頻焦點 if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); } // 還原音量 mediaPlayer.setVolume(1.0f, 1.0f); break; case AudioManager.AUDIOFOCUS_LOSS: // 長久的失去音頻焦點,釋放MediaPlayer if (mediaPlayer.isPlaying()) mediaPlayer.stop(); mediaPlayer.release(); mediaPlayer = null; break; case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: // 展示失去音頻焦點,暫停播放等待重新獲得音頻焦點 if (mediaPlayer.isPlaying()) mediaPlayer.pause(); break; case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: // 失去音頻焦點,無需停止播放,降低聲音即可 if (mediaPlayer.isPlaying()) { mediaPlayer.setVolume(0.1f, 0.1f); } break; } } }, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
以上就講解了MediaPlayer的一些高級的內容,在掌握了MediaPlayer的使用之後,開發有關音樂播放類的應用的時候就可以得心應手了。從用戶體驗的方面出發,如果真實開發一款播放器類的軟件,需要監聽AUDIO_BECOMING_NOISY的廣播,它會在音頻輸出源從其他輸出源變換到設備揚聲器的時候發出此廣播,監聽廣播在音頻輸出源改變到設備揚聲器的時候,停止播放,這樣確保在耳機或額外的音頻輸出硬件與設備斷開連接的時候,不至於重新從揚聲器繼續輸出音頻播放。
源碼鏈接:http://download.csdn.net/detail/duanyu218/7475569
加速篇GRADLE的構建過程通常會比較漫長,一個中等項目,10M左右大小的app,一次完整構建大概在5分鐘左右,是不是很嚇人,當然,如果是在調試階段,采用Android
本文實例講述了Android中ListView下拉刷新的實現方法。分享給大家供大家參考,具體如下:ListView中的下拉刷新是非常常見的,也是經常使用的,看到有很多同學
滴滴巴士是滴滴快車繼滴滴順風車、滴滴快車服務之後推出的又一便民出行服務,特別廣大上班族來說無疑是極好的,再也不用去擠公交、擠地鐵了。下面下載吧小編就給大家講
1、程序運行效果圖 二、代碼實現 1、main.xml 2、tab1.xml、tab2.xm