天天看點

初識AudioManager

初識AudioManager

我今天在群裡看到有人發了一個調節聲音的小軟體 可以調節各種聲音 感覺挺友善 就 想借代碼看看 

可是不借 真小氣  ╭(╯^╰)╮ 于是我自己寫個一個簡單版本 初識一下AudioManager

當然 之後會對适配機型  進行進一步深入  讓我先了解一下AudioManager

首先我們需要擷取管理這方面的對象代碼如下

AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

之後我們要了解下音的種類

①通話音量

 AudioManager.STREAM_VOICE_CALL

②系統音量

AudioManager.STREAM_SYSTEM 

③鈴聲音量

 AudioManager.STREAM_RING

④音樂音量

AudioManager.STREAM_MUSIC

⑤提示聲音音量

AudioManager.STREAM_NOTIFICATION

⑥鬧鈴音量 

AudioManager.STREAM_ALARM

7雙音多頻      
AudioManager.STREAM_DTMF max=15      

了最後我們要了解一下控制音量大小的方法

//參數一調節音量類型 參數第二參數表示改變後的音量   第三個參數可以使同步顯示音量調節條
mAudioManager.setStreamVolume(type, i, i);      

好了很簡單 最後我就展示下代碼  很短一節

public class Main2Activity extends AppCompatActivity {
    SeekBar seekBar_alarm;
    SeekBar seekBar_call;
    SeekBar seekBar_music;
    SeekBar seekBar_noti;
    SeekBar seekBar_ring;
    SeekBar seekBar_system;

    AudioManager mAudioManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        seekBar_alarm= (SeekBar) findViewById(R.id.seekBar_alarm);
        seekBar_call= (SeekBar) findViewById(R.id.seekBar_call);
        seekBar_music= (SeekBar) findViewById(R.id.seekBar_music);
        seekBar_noti= (SeekBar) findViewById(R.id.seekBar_noti);
        seekBar_ring= (SeekBar) findViewById(R.id.seekBar_ring);
        seekBar_system= (SeekBar) findViewById(R.id.seekBar_system);
         mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

        setListener(seekBar_alarm,mAudioManager.STREAM_ALARM,"鬧鐘音量");
        setListener(seekBar_call,mAudioManager.STREAM_VOICE_CALL,"通話音量");
        setListener(seekBar_music,mAudioManager.STREAM_MUSIC,"音樂音量");
        setListener(seekBar_noti,mAudioManager.STREAM_NOTIFICATION,"提示音量");
        setListener(seekBar_ring,mAudioManager.STREAM_RING,"鈴聲音量");
        setListener(seekBar_system,mAudioManager.STREAM_SYSTEM,"系統音量");


        seekBar_alarm.setProgress( mAudioManager.getStreamVolume( AudioManager.STREAM_ALARM ));
        seekBar_call.setProgress(mAudioManager.getStreamVolume( AudioManager.STREAM_VOICE_CALL ));
        seekBar_music.setProgress(mAudioManager.getStreamVolume( AudioManager.STREAM_MUSIC ));
        seekBar_noti.setProgress(mAudioManager.getStreamVolume( AudioManager.STREAM_NOTIFICATION ));
        seekBar_ring.setProgress(mAudioManager.getStreamVolume( AudioManager.STREAM_RING ));
        seekBar_system.setProgress(mAudioManager.getStreamVolume( AudioManager.STREAM_SYSTEM ));

        //通話音量
        int max_call = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_VOICE_CALL );
        int current_call = mAudioManager.getStreamVolume( AudioManager.STREAM_VOICE_CALL );
        Log.i("VIOCE_CALL", "max_call : " + max_call + " current_call : " + current_call);
        //系統音量

        int max_system = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_SYSTEM );
        int current_system = mAudioManager.getStreamVolume( AudioManager.STREAM_SYSTEM );
        Log.i("VIOCE_CALL", "max_system : " + max_system + " current_system : " + current_system);
//        ③鈴聲音量
        int  max_ring = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_RING );
        int  current_ring = mAudioManager.getStreamVolume( AudioManager.STREAM_RING );
        Log.i("VIOCE_CALL", "max_ring : " + max_ring + " current_ring : " + current_ring);

        //        ④音樂音量
        int  max_music = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_MUSIC );
        int  current_music = mAudioManager.getStreamVolume( AudioManager.STREAM_MUSIC );
        Log.i("VIOCE_CALL", "max_music : " + max_music + " current_music : " + current_music);
//        ⑤提示聲音音量
        int   max_noti = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_NOTIFICATION );
        int current_noti = mAudioManager.getStreamVolume( AudioManager.STREAM_NOTIFICATION );
        Log.i("VIOCE_CALL", "max_noti : " + max_noti + " current_noti : " + current_noti);
//        ⑥鬧鈴音量
        int max_alarm = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_ALARM );
        int current_alarm = mAudioManager.getStreamVolume( AudioManager.STREAM_ALARM );
        Log.i("VIOCE_CALL", "max_alarm : " + max_alarm + " current_alarm : " + current_alarm);      
//        7雙音多頻
int max_dtmf = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_DTMF );
int current_dtmf = mAudioManager.getStreamVolume( AudioManager.STREAM_DTMF );
Log.i("VIOCE_CALL", "max_dtmf : " + max_dtmf + " current_dtmf : " + current_dtmf);      
} public void setListener(SeekBar seekBar, final int type, final String str){ seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { Log.i("VIOCE_CALL", i+""); //參數一調節音量類型 參數第二參數表示改變後的音量 第三個參數可以使同步顯示音量調節條 mAudioManager.setStreamVolume(type, i, i); } @Override public void onStartTrackingTouch(SeekBar seekBar) { Log.i("VIOCE_CALL11", "開始+"); } @Override public void onStopTrackingTouch(SeekBar seekBar) { Log.i("VIOCE_CALL1", str+"結束"+mAudioManager.getStreamVolume( type)); } }); }}

這樣就可以 了   記住seekbar的最大值要和該類型音量的最大值一樣才好控制

給大家列一下

①通話音量

 AudioManager.STREAM_VOICE_CALL      max=6

②系統音量

AudioManager.STREAM_SYSTEM       max=15

③鈴聲音量

 AudioManager.STREAM_RING      max=15

④音樂音量

AudioManager.STREAM_MUSIC      max=60

⑤提示聲音音量

AudioManager.STREAM_NOTIFICATION      max=15

⑥鬧鈴音量 

AudioManager.STREAM_ALARM      max=15

7雙音多頻      
AudioManager.STREAM_DTMF max=15      

最後一種雙音多頻 最後加上去 還沒測試    大家自己加一下吧O(∩_∩)O哈哈~

希望能對初學者有幫助 

謝謝O(∩_∩)O謝謝