博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AudioManager控制声音和铃声
阅读量:6831 次
发布时间:2019-06-26

本文共 3359 字,大约阅读时间需要 11 分钟。

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); 

}

 

 

转载于:https://www.cnblogs.com/yangjies145/p/6361840.html

你可能感兴趣的文章
关于jquery的serialize方法转换空格为+号的解决方法
查看>>
微信发一个网址打开后自动调用手机自带默认浏览器或提示选择浏览器打开如何实现?...
查看>>
ADO.NET 快速入门(二):执行命令
查看>>
菜鸟学习WPF(一):开篇
查看>>
Hibernate查询HQL(第二部分)
查看>>
数据源配置
查看>>
闲置的2017
查看>>
【习题1】第一个程序【第2天】
查看>>
JavaScript 编程模式
查看>>
c#获取文件夹路径(转载)
查看>>
BZOJ2940 条纹
查看>>
WCF 第五章 行为 事务之事务服务行为
查看>>
转:java内部类作用
查看>>
在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序
查看>>
SqlServer中常常搞不清楚 sp_columns来看一看
查看>>
Jmeter 分布式压力测试
查看>>
Keepalived+NFS+SHELL脚本实现NFS-HA高可用
查看>>
*Algs4-1.5.26Erdos-Renyi模型的均摊成本图像-(未读懂题)
查看>>
ftp服务器搭建(离线安装vsftpd),配置
查看>>
【纪中集训2019.3.11】Cubelia
查看>>