編輯:Android開發實例
創造優秀音頻體驗的第一步是了解您的應用程序將使用的音頻流類型。
Android 系統保持相互獨立的音頻流通道來播放音樂,報警,通知,來電鈴聲,系統聲音,呼叫(通話)音量,和 DTMF 音調(鍵盤撥號)。
這樣做主要是為了使用戶能夠獨立地控制每個流的音量。
多數的流僅限於系統事件,所以,除非您的應用程序是要更換鬧鐘,否則幾乎可以肯定的是使用 STREAM_MUSIC 音頻流。
默認情況下,按音量鍵控制修改當前獲得焦點的音頻流的音量。假如您的應用程序當前不是正在播放音樂,或者沒有運行,那麼音量鍵將會調整振鈴的音量。
如果您有一個游戲或音樂應用程序,當用戶點擊音量鍵的時候,即使他們目前正在浏覽歌曲,或者沒有停留在當前的音樂游戲的位置,他們仍然希望控制游戲或音樂的音量。
您可以通過接收音量控制鍵的按鍵消息來修改當前的音頻流音量。不過不用那麼麻煩 ,Android 已經提供了方便的 setVolumeControlStream() 方法來根據您指定的音頻流來自動調節音量。
首先確定您的應用程序將使用的音頻流,然後通過 setVolumeControlStream 方法設置其為當前焦點的音頻流。
這個方法應該被及早調用,並且在生命周期中只需要調用一次即可,所以通常應在 Activity 或者 Fragment 的 OnCreate() 內 調用。
這將確保只要你的應用程序是可見狀態的,音量控制功能就是用戶所期望的效果(即控制當前應用程序的音量)。
代碼示例:
setVolumeControlStream(AudioManager.STREAM_MUSIC);
從現在開始,按設備上的音量鍵將影響您指定的(示例“音樂”)的音頻流。
很多手機和許多無線耳機都附帶有媒體播放控制按鈕,如播放,暫停,停止,跳過。每當用戶按下這些硬件鍵,系統就會廣播 ACTION_MEDIA_BUTTON 動作。
為了響應媒體按鈕的點擊事件,您需要注冊 BroadcastReceiver 來監聽廣播。
代碼示例:
<receiver android:name=".RemoteControlReceiver"> <intent-filter> <action android:name="android.intent.action.MEDIA_BUTTON" /> </intent-filter> </receiver>
Receiver 中需要知道到底是按下了哪個鍵的具體信息,Intent 中包括了 EXTRA_KEY_EVENT 鍵值,可以通過它來取得KeyEvent 類型的值 ,KeyEvent中的KEYCODE_MEDIA_*靜態常量表示了所有的媒體按鈕類型,如 KEYCODE_MEDIA_PLAY_PAUSE 和 KEYCODE_MEDIA_NEXT 等等。
代碼示例:
public class RemoteControlReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) { KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); if (KeyEvent.KEYCODE_MEDIA_PLAY == event.getKeyCode()) { // Handle key press. // 處理播放按鍵的消息 } } } }
因為多個應用程序可能會接聽和響應媒體按鍵消息,您必須以編程方式控制您的應用程序何時應該接受媒體按鈕事件。
在您的應用程序中可以使用 AudioManager 來注冊和取消注冊媒體按鈕的事件接收器,注冊時,使用您的專用事件接收器。
示例代碼 :
AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE); ... // Start listening for button presses 開始 監 聽 am.registerMediaButtonEventReceiver(RemoteControlReceiver); ... // Stop listening for button presses 取消 監 聽 am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);
通常情況下,應用程序在失去焦點或不在屏幕顯示隱藏到後台的時候, 應注銷其大部分的接聽器(如在 onStop() 回調函數中) 。
然而,對於媒體播放應用程序卻沒有這麼簡單,事實上,最重要的是,當您的應用程序是處於不可見的狀態時,此時不能由屏幕上的 UI 控制,但是仍然需要響應媒體播放控制按鈕(最典型的就是後台播放音樂) 。
所以,一個更好的方法是:當您的應用程序獲得和失去音頻焦點的時候分別注冊和注銷媒體按鈕的事件接收器,而不僅僅是依賴於應用程序的界面狀態 。
具體方案請參考下一節課程。
參考文摘:
https://developer.android.com/training/managing-audio/volume-playback.html
轉自:http://blog.zhourunsheng.com/2011/11/phonegap-%e4%b9%8b-android-%e7%ab%af%e6%8f%92%e4%bb%b6%e5%bc%80%e5%8f%91/ | 潤物無聲
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放
動畫在Android中可以有許多方式。在本章中,我們將討論一個簡單的和廣泛使用的動畫制作 - 所謂的補間動畫方式。補間動畫補間動畫需要一些參數,如初始值,終值,大小,持續
android:gravity:設置的是控件自身上面的內容位置 android:layout_gravity:設置控件本身相對於父控件的顯示位置。 看下如下代碼段
在使用eclipse進行安卓java的編程的時候,有時候我們會遇到這樣的問題:那就是無故彈出aapt.exe停止工作的提示,雖然程序不會崩潰,但是這個提示經常彈出