Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android技術基礎 >> 10.3 AudioManager(音頻管理器)

10.3 AudioManager(音頻管理器)

編輯:Android技術基礎

本節引言:

在多媒體的第一節,我們用SoundPool寫了個Duang的示例,小豬點擊一個按鈕後,突然發出"Duang"的 一聲,而且當時的聲音很大,嚇死寶寶了,好在不是上班時間,上班時間偷偷寫博客給經理知道 會作死的~嗯,好的,說到這個聲音大小就得介紹下Android為我們提供的(音量大小控制)的API:

AudioManager(音頻管理器)了,該類位於Android.Media包下,提供了音量控制與鈴聲模式相關操作! 本節我們就來學下這個東東的用法,你可以寫一個Demo,一個簡單的靜音,每次看小電影之前,先 進Demo點下靜音,然後,說說而已哈~嗯,話不多說,開始本節內容!

官方API文檔: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_MUTEADJUST_UNMUTE

對了,還有:

如果adjustStreamVolume()的第三個參數你設置了振動(Vibrator), 需要在AndroidManifest.xml中添加這個權限哦!

<**uses-permission android:name="android.permission.VIBRATE"**/>

4.代碼示例下載

AudioManagerDemo.zip


本節小結:

好的,本節給大家演示了AudioManager用於調節音量的一個簡單用法,這個類筆者也不常用 到,以後如果有什麼新get的技能再加上吧~嘿嘿,靜音Demo寫好沒?要結合實際需求哈~

另外,本周博客可能不會更新得太頻繁,本周要把公司的WebSocket庫替換掉,有得頭痛了~ 好的,就說這麼多,謝謝~

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved