AudioManager(音頻管理器)
1.獲得AudioManager對象實例
AudioManager audiomanage = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
2.相關方法詳解
常用方法:
adjustVolume
(int direction, int flags): 控制手機音量,調大或者調小一個單位,根據第一個參數進行判斷
AudioManager.ADJUST_LOWER
,可調小一個單位;AudioManager.ADJUST_RAISE
,可調大一個單位adjustStreamVolume
(int streamType, int direction, int flags): 同上,不過可以選擇調節的聲音類型 1)streamType參數,指定聲音類型,有下述幾種聲音類型:STREAM_ALARM
:手機鬧鈴STREAM_MUSIC
:手機音樂STREAM_RING
:電話鈴聲STREAM_SYSTEAM
:手機系統STREAM_DTMF
:音調STREAM_NOTIFICATION
:系統提示STREAM_VOICE_CALL
:語音電話 2)第二個參數和上面那個一樣,調大或調小音量的 3)可選的標誌位,比如AudioManager.
FLAG_SHOW_UI
,顯示進度條,AudioManager.PLAY_SOUND
:播放聲音setStreamVolume
(int streamType, int index, intflags):直接設置音量大小getMode
( ):返回當前的音頻模式setMode
( ):設置聲音模式 有下述幾種模式:MODE_NORMAL
(普通),MODE_RINGTONE
(鈴聲),MODE_IN_CALL
(打電話),MODE_IN_COMMUNICATION
(通話)getRingerMode
( ):返回當前的鈴聲模式
setRingerMode
(int streamType):設置鈴聲模式 有下述幾種模式: 如RINGER_MODE_NORMAL
(普通)、RINGER_MODE_SILENT
(靜音)、RINGER_MODE_VIBRATE
(震動)getStreamVolume
(int streamType): 獲得手機的當前音量,最大值為7,最小值為0,當設置為0的時候,會自動調整為震動模式getStreamMaxVolume
(int streamType):獲得手機某個聲音類型的最大音量值setStreamMute
(int streamType,boolean state):將手機某個聲音類型設置為靜音setSpeakerphoneOn
(boolean on):設置是否打開擴音器setMicrophoneMute
(boolean on):設置是否讓麥克風靜音isMicrophoneMute
():判斷麥克風是否靜音或是否打開
isMusicActive
():判斷是否有音樂處於活躍狀態isWiredHeadsetOn
():判斷是否插入了耳機
其他方法:
abandonAudioFocus
(AudioManager.OnAudioFocusChangeListenerl):放棄音頻的焦點adjustSuggestedStreamVolume
(int,int suggestedStreamType intflags): 調整最相關的流的音量,或者給定的回退流getParameters
(String keys):給音頻硬體設置一個varaible數量的參數值getVibrateSetting
(int vibrateType):返回是否該用戶的振動設置為振動類型isBluetoothA2dpOn
():檢查是否A2DP藍牙耳機音頻路由是打開或關閉isBluetoothScoAvailableOffCall
():顯示當前平台是否支持使用SCO的關閉調用用例isBluetoothScoOn
():檢查通信是否使用藍牙SCO
loadSoundEffects
():載入聲音效果playSoundEffect
((int effectType, float volume):播放聲音效果egisterMediaButtonEventReceiver
(ComponentName eventReceiver): 註冊一個組件MEDIA_BUTTON意圖的唯一接收機requestAudioFocus
(AudioManager.OnAudioFocusChangeListener l,int streamType,int durationHint) 請求音頻的焦點setBluetoothScoOn
(boolean on):要求使用藍牙SCO耳機進行通訊startBluetoothSco/stopBluetoothSco()
():啟動/停止藍牙SCO音頻連接unloadSoundEffects
():卸載音效
3.使用示例
嘿嘿,屬性蠻多的,有些還涉及到藍牙這些東東,這裡我們只講解最常見的一些方法!
遇到一些特殊的沒見過的,我們再來查文檔!
簡單的示例:使用Mediaplayer播放音樂,通過AudioManager調節音量大小與靜音!
對了,先在res下創建一個raw的文件夾,往裡面丟一個MP3資源文件!
運行效果圖:
代碼實現:
布局代碼activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btn_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="播放" />
<Button
android:id="@+id/btn_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:enabled="false"
android:text="停止" />
<Button
android:id="@+id/btn_higher"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="調高音量" />
<Button
android:id="@+id/btn_lower"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="調低音量" />
<Button
android:id="@+id/btn_quite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="靜音" />
</LinearLayout>
MainActivity.java:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btn_start;
private Button btn_stop;
private Button btn_higher;
private Button btn_lower;
private Button btn_quite;
private MediaPlayer mePlayer;
private AudioManager aManager;
//定義一個標誌用來標示是否點擊了靜音按鈕
private int flag = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//獲得系統的音頻對象
aManager = (AudioManager) getSystemService(Service.AUDIO_SERVICE);
//初始化mediaplayer對象,這裡播放的是raw文件中的mp3資源
mePlayer = MediaPlayer.create(MainActivity.this, R.raw.countingstars);
//設置循環播放:
mePlayer.setLooping(true);
bindViews();
}
private void bindViews() {
btn_start = (Button) findViewById(R.id.btn_start);
btn_stop = (Button) findViewById(R.id.btn_stop);
btn_higher = (Button) findViewById(R.id.btn_higher);
btn_lower = (Button) findViewById(R.id.btn_lower);
btn_quite = (Button) findViewById(R.id.btn_quite);
btn_start.setOnClickListener(this);
btn_stop.setOnClickListener(this);
btn_higher.setOnClickListener(this);
btn_lower.setOnClickListener(this);
btn_quite.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_start:
btn_stop.setEnabled(true);
mePlayer.start();
btn_start.setEnabled(false);
break;
case R.id.btn_stop:
btn_start.setEnabled(true);
mePlayer.pause();
btn_stop.setEnabled(false);
break;
case R.id.btn_higher:
// 指定調節音樂的音頻,增大音量,而且顯示音量圖形示意
aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
break;
case R.id.btn_lower:
// 指定調節音樂的音頻,降低音量,只有聲音,不顯示圖形條
aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_LOWER, AudioManager.FLAG_PLAY_SOUND);
break;
case R.id.btn_quite:
// 指定調節音樂的音頻,根據isChecked確定是否需要靜音
flag *= -1;
if (flag == -1) {
aManager.setStreamMute(AudioManager.STREAM_MUSIC, true); //API 23過期- -
// aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_MUTE,
// AudioManager.FLAG_SHOW_UI); //23以後的版本用這個
btn_quite.setText("取消靜音");
} else {
aManager.setStreamMute(AudioManager.STREAM_MUSIC, false);//API 23過期- -
// aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_UNMUTE,
// AudioManager.FLAG_SHOW_UI); //23以後的版本用這個
aManager.setMicrophoneMute(false);
btn_quite.setText("靜音");
}
break;
}
}
}
代碼還是非常簡單的,另外設置靜音的方法setStreamMute()在API 23版本過期, 可以使用另一個方法adjustStreamVolume(int, int, int),然後第三個屬性設置:
ADJUST_MUTE 或 ADJUST_UNMUTE!
對了,還有:
如果adjustStreamVolume()的第三個參數你設置了振動(Vibrator), 需要在AndroidManifest.xml中添加這個許可權哦!
<**uses-permission android:name="android.permission.VIBRATE"**/>
4.代碼示例下載
AudioManagerDemo.zip
本節小結:
好的,本節給大家演示了AudioManager用於調節音量的一個簡單用法,這個類筆者也不常用 到,以後如果有什麼新get的技能再加上吧~嘿嘿,靜音Demo寫好沒?要結合實際需求哈
※MySQL使用JPA+Hibernate的9個高性能技巧
※基於 Python 自建分散式高並發 RPC 服務
TAG:程序員小新人學習 |