2025年Android 音频管理AudioManager使用

Android 音频管理AudioManager使用AudioManager 的作用 调整音量和控制响铃模式 声音分类 STREAM VOICE CALL 通话声音 STREAM SYSTEM 系统声音 包括按键声音等 STREAM RING 来电响铃 STREAM MUSIC 媒体声音 包括音乐 视频

大家好,我是讯享网,很高兴认识大家。

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等待硬件资源释放后在去调整媒体声音及有效了。

小讯
上一篇 2025-02-20 15:54
下一篇 2025-03-14 10:16

相关推荐

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