Android通过AudioFocus机制对音频焦点进行管理
16lz
2021-12-04
Android通过AudioFocus机制对音频焦点进行管理。
Music通过下述代码申请Focus权限:
AudioManager mAudioManager;mAudioManager.requestAudioFocus(mAudioFocusListener, AudioManager.STREAM_MUSIC,AudioManager.AUDIOFOCUS_GAIN);
1、关于参数:mAudioFocusListener 就是音频焦点变化时的监听器,这是音频焦点控制的重点
其中mAudioFocusListener 注册了 OnAudioFocusChangeListener 的监听;
private OnAudioFocusChangeListener mAudioFocusListener = new OnAudioFocusChangeListener() { public void onAudioFocusChange(int focusChange) { Log.d(TAG, " foucs change"); //做焦点变化的处理逻辑 mHandler.obtainMessage(FOCUSCHANGE, focusChange, 0).sendToTarget(); } };
private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { case FOCUSCHANGE: switch (msg.arg1) { case AudioManager.AUDIOFOCUS_LOSS: //失去焦点,暂停处理,暂停播放当前音乐 //你会长时间的失去焦点,所以不要指望在短时间内能获得。请结束自己的相关音频工作并做好收尾工作。比如另外一个音乐播放器开始播放音乐了,前提是这个另外的音乐播放器他也实现了音频焦点的控制, break; case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: //你的焦点会短暂失去,但是你可以与新的使用者共同使用音频焦点 break; case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: //你会短暂的失去音频焦点,你可以暂停音乐,但不要释放资源,因为你一会就可以夺回焦点并继续使用 //如听音乐过程中,收到电话 break; case AudioManager.AUDIOFOCUS_GAIN: //播放操作 //你已经完全获得了音频焦点 break; default: Log.d(TAG, "Unknown audio focus change code"); } break; } }
2、关于参数:AudioManager.STREAM_MUSIC 表示焦点获得之后的数据传输类型,包含以下类型:
STREAM_ALARM 警报STREAM_MUSIC 音乐回放即媒体音量STREAM_NOTIFICATION 窗口顶部状态栏Notification,STREAM_RING 铃声STREAM_SYSTEM 系统STREAM_VOICE_CALL 通话STREAM_DTMF 双音多频,不是很明白什么东西
3、关于参数:AudioManager.AUDIOFOCUS_GAIN 告知系统,你要求获得音频焦点的用途,系统根据你所要求的类型来给其他监听者发出相应的焦点控制参数
AUDIOFOCUS_GAIN_TRANSIENT:只是短暂获得,一会就释放焦点,比如你只是想发个notification时用下一秒不到的铃声。AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK:只是背景获得,之前的音频焦点使用者无需释放焦点给,可与其共同使用。AUDIOFOCUS_GAIN:我要求完全获得焦点,其他人需要释放焦点。比如我要播放音乐了,这时就要抢占整个音频焦点。
在进行音频开发时,最好遵循audio机制,不然会给用户带来不好的体验。
更多相关文章
- Android录音,和实现微信长按录音效果!
- Android(安卓)布局
- Android(安卓)JNI 获取应用程序签名
- TextView 设置背景【点击或获得焦点改变背景】
- android 定义 程序 Scheme 接收特定URI开启Activity
- Android(安卓)获得手机屏幕大小
- Android获取WIFI状态下的IP地址以及MAC地址
- android SearchView 失去焦点
- Android(安卓)服务器连接工具类HttpUtil