Android不抢占audio焦点,Android通过AudioFocus机制对音频焦点进行管理

Android通过AudioFocus机制对音频焦点进行管理。

Music通过下述代码申请Focus权限: AudioManager mAudioManager; mAudioManager.requestAudioFocus(mAudioFocusListener, AudioManager.STREAM_MUSIC,AudioManager.AUDIOFOCUS_GAIN);

其中mAudioFocusListener 注册了 OnAudioFocusChangeListener 的监听; 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; } }

STREAM_ALARM 警报 STREAM_MUSIC 音乐回放即媒体音量 STREAM_NOTIFICATION 窗口顶部状态栏Notification, STREAM_RING 铃声 STREAM_SYSTEM 系统 STREAM_VOICE_CALL 通话 STREAM_DTMF 双音多频,不是很明白什么东西

AUDIOFOCUS_GAIN_TRANSIENT:只是短暂获得,一会就释放焦点,比如你只是想发个notification时用下一秒不到的铃声。 AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK:只是背景获得,之前的音频焦点使用者无需释放焦点给,可与其共同使用。 AUDIOFOCUS_GAIN:我要求完全获得焦点,其他人需要释放焦点。比如我要播放音乐了,这时就要抢占整个音频焦点。

在进行音频开发时,最好遵循audio机制,不然会给用户带来不好的体验。

你可能感兴趣的:(Android不抢占audio焦点,Android通过AudioFocus机制对音频焦点进行管理)