W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
在多媒體的第一節(jié),我們用SoundPool寫(xiě)了個(gè)Duang的示例,小豬點(diǎn)擊一個(gè)按鈕后,突然發(fā)出"Duang"的 一聲,而且當(dāng)時(shí)的聲音很大,嚇?biāo)缹殞毩?img src="https://atts.w3cschool.cn/attachments/image/cimg/2015-12-02_565e79b2bff83.jpg" alt="">,好在不是上班時(shí)間,上班時(shí)間偷偷寫(xiě)博客給經(jīng)理知道 會(huì)作死的~嗯,好的,說(shuō)到這個(gè)聲音大小就得介紹下Android為我們提供的(音量大小控制)的API:
AudioManager(音頻管理器)了,該類位于Android.Media包下,提供了音量控制與鈴聲模式相關(guān)操作! 本節(jié)我們就來(lái)學(xué)下這個(gè)東東的用法,你可以寫(xiě)一個(gè)Demo,一個(gè)簡(jiǎn)單的靜音,每次看小電影之前,先 進(jìn)Demo點(diǎn)下靜音,然后
,說(shuō)說(shuō)而已哈~嗯,話不多說(shuō),開(kāi)始本節(jié)內(nèi)容!
官方API文檔:AudioManager
AudioManager audiomanage = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
常用方法:
- adjustVolume(int direction, int flags): 控制手機(jī)音量,調(diào)大或者調(diào)小一個(gè)單位,根據(jù)第一個(gè)參數(shù)進(jìn)行判斷AudioManager.ADJUST_LOWER,可調(diào)小一個(gè)單位; AudioManager.ADJUST_RAISE,可調(diào)大一個(gè)單位
- adjustStreamVolume(int streamType, int direction, int flags): 同上,不過(guò)可以選擇調(diào)節(jié)的聲音類型 1)streamType參數(shù),指定聲音類型,有下述幾種聲音類型: STREAM_ALARM:手機(jī)鬧鈴 STREAM_MUSIC:手機(jī)音樂(lè)
STREAM_RING:電話鈴聲 STREAM_SYSTEAM:手機(jī)系統(tǒng)
STREAM_DTMF:音調(diào) STREAM_NOTIFICATION:系統(tǒng)提示
STREAM_VOICE_CALL:語(yǔ)音電話 2)第二個(gè)參數(shù)和上面那個(gè)一樣,調(diào)大或調(diào)小音量的 3)可選的標(biāo)志位,比如AudioManager.FLAG_SHOW_UI,顯示進(jìn)度條,AudioManager.PLAY_SOUND:播放聲音- setStreamVolume(int streamType, int index, intflags):直接設(shè)置音量大小
- getMode( ):返回當(dāng)前的音頻模式
- setMode( ):設(shè)置聲音模式 有下述幾種模式: MODE_NORMAL(普通), MODE_RINGTONE(鈴聲), MODE_IN_CALL(打電話),MODE_IN_COMMUNICATION(通話)
- getRingerMode( ):返回當(dāng)前的鈴聲模式
- setRingerMode(int streamType):設(shè)置鈴聲模式 有下述幾種模式: 如RINGER_MODE_NORMAL(普通)、RINGER_MODE_SILENT(靜音)、RINGER_MODE_VIBRATE(震動(dòng))
- getStreamVolume(int streamType): 獲得手機(jī)的當(dāng)前音量,最大值為7,最小值為0,當(dāng)設(shè)置為0的時(shí)候,會(huì)自動(dòng)調(diào)整為震動(dòng)模式
- getStreamMaxVolume(int streamType):獲得手機(jī)某個(gè)聲音類型的最大音量值
- setStreamMute(int streamType,boolean state):將手機(jī)某個(gè)聲音類型設(shè)置為靜音
- setSpeakerphoneOn(boolean on):設(shè)置是否打開(kāi)擴(kuò)音器
- setMicrophoneMute(boolean on):設(shè)置是否讓麥克風(fēng)靜音
- isMicrophoneMute():判斷麥克風(fēng)是否靜音或是否打開(kāi)
- isMusicActive():判斷是否有音樂(lè)處于活躍狀態(tài)
- isWiredHeadsetOn():判斷是否插入了耳機(jī)
其他方法:
- abandonAudioFocus(AudioManager.OnAudioFocusChangeListenerl):放棄音頻的焦點(diǎn)
- adjustSuggestedStreamVolume(int,int suggestedStreamType intflags): 調(diào)整最相關(guān)的流的音量,或者給定的回退流
- getParameters(String keys):給音頻硬件設(shè)置一個(gè)varaible數(shù)量的參數(shù)值
- getVibrateSetting(int vibrateType):返回是否該用戶的振動(dòng)設(shè)置為振動(dòng)類型
- isBluetoothA2dpOn():檢查是否A2DP藍(lán)牙耳機(jī)音頻路由是打開(kāi)或關(guān)閉
- isBluetoothScoAvailableOffCall():顯示當(dāng)前平臺(tái)是否支持使用SCO的關(guān)閉調(diào)用用例
- isBluetoothScoOn():檢查通信是否使用藍(lán)牙SCO
- loadSoundEffects():加載聲音效果
- playSoundEffect((int effectType, float volume):播放聲音效果
- egisterMediaButtonEventReceiver(ComponentName eventReceiver): 注冊(cè)一個(gè)組件MEDIA_BUTTON意圖的唯一接收機(jī)
- requestAudioFocus(AudioManager.OnAudioFocusChangeListener l,int streamType,int durationHint) 請(qǐng)求音頻的焦點(diǎn)
- setBluetoothScoOn(boolean on):要求使用藍(lán)牙SCO耳機(jī)進(jìn)行通訊
- startBluetoothSco/stopBluetoothSco()():?jiǎn)?dòng)/停止藍(lán)牙SCO音頻連接
- unloadSoundEffects():卸載音效
嘿嘿,屬性蠻多的,有些還涉及到藍(lán)牙這些東東,這里我們只講解最常見(jiàn)的一些方法!
遇到一些特殊的沒(méi)見(jiàn)過(guò)的,我們?cè)賮?lái)查文檔!
簡(jiǎn)單的示例:使用Mediaplayer播放音樂(lè),通過(guò)AudioManager調(diào)節(jié)音量大小與靜音!
對(duì)了,先在res下創(chuàng)建一個(gè)raw的文件夾,往里面丟一個(gè)MP3資源文件!
運(yùn)行效果圖:
代碼實(shí)現(xiàn):
布局代碼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="調(diào)高音量" />
<Button
android:id="@+id/btn_lower"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="調(diào)低音量" />
<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;
//定義一個(gè)標(biāo)志用來(lái)標(biāo)示是否點(diǎn)擊了靜音按鈕
private int flag = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//獲得系統(tǒng)的音頻對(duì)象
aManager = (AudioManager) getSystemService(Service.AUDIO_SERVICE);
//初始化mediaplayer對(duì)象,這里播放的是raw文件中的mp3資源
mePlayer = MediaPlayer.create(MainActivity.this, R.raw.countingstars);
//設(shè)置循環(huán)播放:
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:
// 指定調(diào)節(jié)音樂(lè)的音頻,增大音量,而且顯示音量圖形示意
aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
break;
case R.id.btn_lower:
// 指定調(diào)節(jié)音樂(lè)的音頻,降低音量,只有聲音,不顯示圖形條
aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_LOWER, AudioManager.FLAG_PLAY_SOUND);
break;
case R.id.btn_quite:
// 指定調(diào)節(jié)音樂(lè)的音頻,根據(jù)isChecked確定是否需要靜音
flag *= -1;
if (flag == -1) {
aManager.setStreamMute(AudioManager.STREAM_MUSIC, true); //API 23過(guò)期- -
// aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_MUTE,
// AudioManager.FLAG_SHOW_UI); //23以后的版本用這個(gè)
btn_quite.setText("取消靜音");
} else {
aManager.setStreamMute(AudioManager.STREAM_MUSIC, false);//API 23過(guò)期- -
// aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_UNMUTE,
// AudioManager.FLAG_SHOW_UI); //23以后的版本用這個(gè)
aManager.setMicrophoneMute(false);
btn_quite.setText("靜音");
}
break;
}
}
}
代碼還是非常簡(jiǎn)單的,另外設(shè)置靜音的方法setStreamMute()在API 23版本過(guò)期, 可以使用另一個(gè)方法adjustStreamVolume(int, int, int),然后第三個(gè)屬性設(shè)置:
ADJUST_MUTE 或 ADJUST_UNMUTE!
對(duì)了,還有:
如果adjustStreamVolume()的第三個(gè)參數(shù)你設(shè)置了振動(dòng)(Vibrator), 需要在AndroidManifest.xml中添加這個(gè)權(quán)限哦!
<**uses-permission android:name="android.permission.VIBRATE"**/>
好的,本節(jié)給大家演示了AudioManager用于調(diào)節(jié)音量的一個(gè)簡(jiǎn)單用法,這個(gè)類筆者也不常用 到,以后如果有什么新get的技能再加上吧~嘿嘿,靜音Demo寫(xiě)好沒(méi)?要結(jié)合實(shí)際需求哈~
另外,本周博客可能不會(huì)更新得太頻繁,本周要把公司的WebSocket庫(kù)替換掉,有得頭痛了~ 好的,就說(shuō)這么多,謝謝~
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: