我今天在群裡看到有人發了一個調節聲音的小軟體 可以調節各種聲音 感覺挺友善 就 想借代碼看看
可是不借 真小氣 ╭(╯^╰)╮ 于是我自己寫個一個簡單版本 初識一下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謝謝