AudioManager 的作用 :调整音量和控制响铃模式
声音分类
- STREAM_VOICE_CALL:通话声音
- STREAM_SYSTEM:系统声音,包括按键声音等
- STREAM_RING:来电响铃
- STREAM_MUSIC:媒体声音(包括音乐,视频,游戏声音)
- STREAM_ALARM:闹钟声音
- STREAM_NOTIFICATION:通知声音
声音模式分类
- RINGER_MODE_NORMAL:正常模式
所有声音都正常,包括系统声音,来电响铃,媒体声音,闹钟,通知声音都有 - RINGER_MODE_SILENT:静音模式
该模式下,来电响铃,通知,系统声音和震动都没有;闹钟,通话声音保持;大部分手机媒体声音依然有,但是小米和少部分oppo手机在设置静音的同时会将媒体声音自动调整为0,此时没有媒体声音。 - RINGER_MODE_VIBRATE:震动模式
该模式下,来电,通知保持震动没有声音;但是媒体,闹钟依然有声音。不过小米手机只有正常模式和静音模式,没有震动模式
控制声音模式的方法
- setRingerMode(int):设置指定的响铃模式
- getRingerMode():得到当前的响铃模式
响铃模式改变的广播
- action:RINGER_MODE_CHANGED_ACTION
- extra:EXTRA_RINGER_MODE
控制音量
- adjustStreamVolume(int streamType, int direction, int flags):单步控制指定声音的音量,第一个参数为音频流类型,第二个参数为加音量还是减音量,第三个参数为flags,默认为0即可。
- setStreamVolume(int streamType, int index, int flags):指定设置声音的音量,第一个参数为音频流类型,第二个参数为调整的音量大小,第三个参数为flags,默认为0既可。
- getStreamVolume(int streamType):得到指定音频流当前的音量
- getStreamMaxVolume(int streamType):得到指定音频流的最大音量
扬声器控制
- setSpeakerphoneOn(boolean on):控制扬声器开或者关
- isSpeakerphoneOn():判断当前扬声器是开还是关
麦克风控制
- setMicrophoneMute(boolean on):设置麦克风静音开或者关
- isMicrophoneMute():判断麦克风是否静音
检查是否插入耳机
- isWiredHeadsetOn():检查是否插入耳机
demo
public class AudioActivity extends Activity {
private AudioManager mAudioManager; private static final String TAG = "AudioActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_audio); initData(); mBroadcast = new MyRingerBroadcast(); IntentFilter intent = new IntentFilter(); intent.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION); registerReceiver(mBroadcast, intent); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(mBroadcast); } private void initData() { mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); int mode = mAudioManager.getRingerMode(); Log.i(TAG, "initData: mode=" + mode); } / * 静音模式 * * @param view */ public void silent(View view) { mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); } / * 震动模式 * * @param view */ public void vibrate(View view) { mAudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE); int mode = mAudioManager.getRingerMode(); Log.i(TAG, "initData: mode=" + mode); } / * 正常模式 * * @param view */ public void normal(View view) { mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); int mode = mAudioManager.getRingerMode(); Log.i(TAG, "initData: mode=" + mode); } / * 单步调整媒体声音 */ public void adjustMusicVolume() { int curVolume = mAudioManager.getStreamVolume(STREAM_MUSIC); for (int i = 0; i <= curVolume; i++) { mAudioManager.adjustStreamVolume(STREAM_MUSIC, ADJUST_RAISE, FLAG_SHOW_UI); } } / * 调整某个指定音频流的声音的音量 */ public void setMusicVolume() { int curVolume = mAudioManager.getStreamVolume(STREAM_MUSIC); mAudioManager.setStreamVolume(STREAM_MUSIC, curVolume , 0) } private MyRingerBroadcast mBroadcast; / *监听响铃模式切换 */ private class MyRingerBroadcast extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); int mode = intent.getIntExtra(AudioManager.EXTRA_RINGER_MODE, -1); Log.i(TAG, "onReceive: action==" + action + " the mode=" + mode); } } }
讯享网
小米手机在静音模式下没有媒体声音的解决方案
一般手机在设置为静音模式下依然保持媒体声音,也就是在静音模式下,播放音乐,视频依然有声音。但是小米手机在设置为静音模式同时将媒体声音自动调整为0。为了解决小米手机在设置静音模式下依然保持媒体声音,解决方案为:在设置静音的同时延时大概500ms之后调整媒体声音到静音之前的声音。
讯享网//设置静音 int curVolume = mAudioManager.getStreamVolume(STREAM_MUSIC); mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); mHandler.postDelayed(new Runnable() { @Override public void run() { mAudioManager.setStreamVolume(STREAM_MUSIC, curVolume , 0); } }, 500);
注意:这里为何要延时500ms之后才去调整媒体声音呢?因为不延时调整媒体声音会无效。声音涉及到硬件资源,设置静音模式后立马去调整声音可能资源还没有及时释放,所以延时500ms等待硬件资源释放后在去调整媒体声音及有效了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/55662.html