實驗7 BindService模擬通信
【目的】
實現啟動端和BindService之間的雙向通信
【要求】
1) 實現從啟動端傳遞一個數據至BindService端;
2) 實現使用BindService服務播放項目源文件中的音樂;
3) 實現在啟動端通過“增加”和“降低”兩個按鈕控制音頻音量大小。
4) 實現在啟動端通過“暫停”按鈕控制音頻暫停播放。
【原理】
- 參考教案,理解BindService和啟動端的通信原理
- AudioManager的理解
AudioManager類位於android.Media 包中,該類提供訪問控制音量和鈴聲模式的操作。
通過getSystemService(Context.AUDIO_SERVICE)方法獲得AudioManager實例對象。
AudioManager audiomanage = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
audiomanager就是我們定義的控制系統聲音的對象。
幾個比較常用到的方法:
1) adjustVolume(int direction, int flags):用來控制手機音量大小,當傳入的第一個參數為AudioManager.ADJUST_LOWER 時,可將音量調小一個單位,傳入AudioManager.ADJUST_RAISE時,則可以將音量調大一個單位。
2) adjustStreamVolume(intstreamType, int direction, intflags):(以步長)調節手機音量大小
參數1:聲音類型,可取為STREAM_VOICE_CALL(通話)、STREAM_SYSTEM(系統聲音)、STREAM_RING(鈴聲)、STREAM_MUSIC(音樂)、STREAM_ALARM(鬧鈴聲)
參數2:調整音量的方向,可取ADJUST_LOWER(降低)、ADJUST_RAISE(升高)、ADJUST_SAME
參數3:可選的標志位
3) setStreamVolume(intstreamType, int index, intflags):直接設置音量大小
4) getStreamVolume(intstreamType):取得當前手機的音量,最大值為7,最小值為0,當為0時,手機自動將模式調整為“震動模式”。
5) setStreamMute(intstreamType, boolean state):設置靜音
部分參考代碼:
//音量控制,初始化定義
AudioManager mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
以一步步長控制音量的增減,並彈出系統默認音量控制條:
//降低音量,調出系統音量控制
if(flag ==0){
mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_LOWER,
AudioManager.FX_FOCUS_NAVIGATION_UP);
}
//增加音量,調出系統音量控制
elseif(flag ==1){
mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_RAISE,
AudioManager.FX_FOCUS_NAVIGATION_UP);
}
其他常用方法:
android audioManager獲取音量:
先獲取AudioManager實例,
AudioManagermAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
//通話音量
int max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL );
int current = mAudioManager.getStreamVolume(AudioManager.STREAM_VOICE_CALL );
//系統音量
int max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_SYSTEM );
current = mAudioManager.getStreamVolume(AudioManager.STREAM_SYSTEM );
//鈴聲音量
max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_RING);
current = mAudioManager.getStreamVolume(AudioManager.STREAM_RING );
//音樂音量
max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC );
current = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC );
//提示聲音音量
max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM );
current = mAudioManager.getStreamVolume(AudioManager.STREAM_ALARM );
//最大音量
intmaxVolume =mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
//當前音量
intcurrentVolume =mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
//直接控制音量的多少:
|
if(isSilent){ mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,0,0); }else{ mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,tempVolume,0);//tempVolume:音量絕對值 } |
實驗報告要求
1) 詳細寫出自己所做實驗的步驟和內容;
2) 詳細記錄實驗過程中發現的問題以及解決問題的方法;
3) 給出程序運行過程中各個頁面的截圖;
4) 提交文件包括:實驗報告、源代碼、可運行的安裝程序,所有文件打包壓縮;
5) 壓縮包命名格式:專業+學號+姓名+實驗7.rar