AudioManager控制声音和铃声

AudioManager最主要的是它能控制声音和铃声

 

这里只讲述几个比较常用到的方法:

adjustVolume(intdirection, int flags) ——用来控制手机音量大小,当传入的第一个参数为 AudioManager.ADJUST_LOWER时,可将音量调小一个单位,传入AudioManager.ADJUST_RAISE 时,则可以将音量调大一个单位。

adjustStreamVolume(intstreamType, int direction, int flags)——(以步长)调节手机音量大小

参数1:声音类型,可取为STREAM_VOICE_CALL(通话)、STREAM_SYSTEM(系统声音)、STREAM_RING(铃声)、STREAM_MUSIC(音乐)、STREAM_ALARM(闹铃声)

参数2:调整音量的方向,可取ADJUST_LOWER(降低)、ADJUST_RAISE(升高)、ADJUST_SAME

参数3:可选的标志位

setStreamVolume(intstreamType, int index, int flags)——直接设置音量大小

getMode() ——返回当前音频模式,如NORMAL(普通), RINGTONE(铃声), or IN_CALL(通话)

setMode()——设置声音模式,可取值NORMAL(普通),RINGTONE(铃声), or IN_CALL(通话)

getRingerMode()——返回当前的铃声模式。如RINGER_MODE_NORMAL(普通)、RINGER_MODE_SILENT(静音)、RINGER_MODE_VIBRATE(震动)

setRingerMode(intringerMode) ——改变铃声模式

getStreamVolume(intstreamType) ——取得当前手机的音量,最大值为7,最小值为0,当为0时,手机自动将模式调整为“震动模式”。

getStreamMaxVolume(intstreamType)——获得当前手机最大铃声。

setStreamMute(intstreamType, boolean state)

//音量控制,初始化定义

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

//最大音量

int  maxVolume =mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);

//当前音量

int  currentVolume =mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

直接控制音量的多少:

以一步步长控制音量的增减,并弹出系统默认音量控制条:

 

//降低音量,调出系统音量控制

if(flag ==0){

            mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC

                                                                            ,AudioManager.ADJUST_LOWER

                                                                            ,AudioManager.FX_FOCUS_NAVIGATION_UP);

}else if(flag ==1){ 

//增加音量,调出系统音量控制

            mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC

                                                                            ,AudioManager.ADJUST_RAISE

        ,AudioManager.FX_FOCUS_NAVIGATION_UP);

}

 

常用方法:

androidaudioManager获取音量:

先获取AudioManager实例,

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

//通话音量

int max =mAudioManager.getStreamMaxVolume( AudioManager.STREAM_VOICE_CALL ); 

int current =mAudioManager.getStreamVolume( AudioManager.STREAM_VOICE_CALL ); 

//系统音量

int max =mAudioManager.getStreamMaxVolume( AudioManager.STREAM_SYSTEM ); 

current =mAudioManager.getStreamVolume( AudioManager.STREAM_SYSTEM ); 

//铃声音量

max =mAudioManager.getStreamMaxVolume( AudioManager.STREAM_RING ); 

current =mAudioManager.getStreamVolume( AudioManager.STREAM_RING ); 

//音乐音量

max =mAudioManager.getStreamMaxVolume( AudioManager.STREAM_MUSIC ); 

current =mAudioManager.getStreamVolume( AudioManager.STREAM_MUSIC ); 

//提示声音音量

max =mAudioManager.getStreamMaxVolume( AudioManager.STREAM_ALARM ); 

current =mAudioManager.getStreamVolume( AudioManager.STREAM_ALARM ); 

 

7)处理Audio硬件设备

查找正在使用的声音设备

if(isBluetoothA2dpOn()) { 

    // Adjust output forBluetooth. 

} else if(isSpeakerphoneOn()) { 

    // Adjust output forSpeakerphone. 

} else if(isWiredHeadsetOn()) { 

    // Adjust output for headsets 

} else {  

    // If audio plays and noone can hearit, is it still playing? 

}

 

当耳机设备或蓝牙设备断开连接之后,Audio设备自动切换到喇叭,会发送ACTION_AUDIO_BECOMING_NOISY 广播,注册一个广播接收者用于接收该 广播就可以控制声音播放

private classNoisyAudioStreamReceiver extends BroadcastReceiver { 

    @Override 

    public void onReceive(Contextcontext, Intent intent) { 

        if(AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction())) { 

            // Pause the playback 

       } 

    } 

 

private IntentFilterintentFilter = newIntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY); 

 

private voidstartPlayback() { 

   registerReceiver(myNoisyAudioStreamReceiver(), intentFilter); 

 

private voidstopPlayback() { 

   unregisterReceiver(myNoisyAudioStreamReceiver); 

}

 

 

posted on 2017-02-02 23:19  信假名如  阅读(388)  评论(0编辑  收藏  举报

导航