前言
大家都知道,从Android 8开始 焦点的申请方式变了,因此,为了兼容不同的Android版本,因此整理在AudioFocusManager中统一管理。
正文
直接上代码AudioFocusManager.java
package com.la.audiotools; import android.content.Context; import android.media.AudioAttributes; import android.media.AudioFocusRequest; import android.media.AudioManager; import android.os.Build; import android.util.Log; /** * 焦点申请管理类 */ public class AudioFocusManager { private static final String TAG = AudioFocusManager.class.getSimpleName(); private AudioFocusRequest mAudioFocusRequest = null; private AudioManager mAudioManager = null; public AudioFocusManager(Context context) { if (null == context) { //这里最好获取一下Application中的Context(略) Log.d(TAG, "AudioFocusManager null... "); } mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); } /** * @param listener 设置焦点状态监听 * @param usage 设置场景(Build.VERSION_CODES.O后支持) * @param streamType 设置的流媒体类型 * @param durationHint 设置的焦点状态类型 * @param acceptDelay 设置接受延迟(Build.VERSION_CODES.O后支持) * @return */ public int requestAudioFocus(AudioManager.OnAudioFocusChangeListener listener, int usage, int streamType, int durationHint, boolean acceptDelay) { if (null == mAudioManager || null == listener) { Log.d(TAG, "requestAudioFocus null... "); return -1; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { AudioAttributes audioAttributes = new AudioAttributes.Builder().setUsage(usage).setContentType(streamType).build(); mAudioFocusRequest = new AudioFocusRequest.Builder(durationHint) .setAudioAttributes(audioAttributes) .setAcceptsDelayedFocusGain(acceptDelay) .setOnAudioFocusChangeListener(listener).build(); return mAudioManager.requestAudioFocus(mAudioFocusRequest); } else { return mAudioManager.requestAudioFocus(listener, streamType, durationHint); } } /** * 释放焦点 * * @param listener 焦点状态监听 * @return */ public int abandonAudioFocusRequest(AudioManager.OnAudioFocusChangeListener listener) { if (null == mAudioManager || null == listener) { Log.d(TAG, "abandonAudioFocusRequest null... "); return -1; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ) { if(null != mAudioFocusRequest){ return -1; } return mAudioManager.abandonAudioFocusRequest(mAudioFocusRequest); } else { return mAudioManager.abandonAudioFocus(listener); } } }
因此用户只需要初始化AudioFocusManager然后设置监听和注销监听了。
参考文章
-
《》
-
《
历史上的今天
暂无评论...
随机推荐
林清玄:再加两个苹果
一位小学老师对我说起,他怎么使一班小学生被改造的秘诀。他的学生在低年级的时候遇到一个非常严格的老师,给学生的作业很多,而给学生的评价却很低。在这位老师的笔下很少有学生可以得到甲,得到乙已经很不错,有许多学生拿到丙、丁,使得学生的家长对自己的孩子都不谅解,学生对学习也逐渐失去信心了。当这班学生升到...
MediaPlayer异常
前言播放媒体测试时,出现Mediaplayer报异常问题,如下打印日志MediaPlayerNative(13594): start called in state 4, mPlayer(0x75b4e81280)MediaPlayerNative(13594): error (-38, 0...
[摘]dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算
前言最近因为一个紧急的项目,客户要求摘他另外一个客户的样机,为了赶进度,我们通过反编译样机中的应用,获取UI和布局等。但,做出来后,效果总感觉有些不一样,比如显示的字体大小。最后发现,我们调试的样机分辨率虽然跟样机一样,但密度不一样。客户的样机:240dpi我们的设备:160dpi获取...
郁达夫:北平的四季
对于一个已经化为异物的故人,追怀起来,总要先想到他或她的好处;随后再慢慢的想想,则觉得当时所感到的一切坏处,也会变作很可寻味的一些纪念,在回忆里开花。关于一个曾经住过的旧地,觉得此生再也不会第二次去长住了,身处入了远离的一角,向这方向的云天遥望一下,回想起来的,自然也同样地只是它的好处。中国的大都...
startService()源码分析
前言startService()源码分析之前Android 6.0是有简单分析过的,但太久了,而且记录也很粗糙,到现在也忘记得差不多了。最近抽空重新走一下,也算是自己的复习吧。这里看的是Android P的源代码。正文这里是Apk1去启动Apk2的服务(Apk2没有启动过)Intent...
严歌苓:读书是生命的另一种存在
一、我关于阅读与写作的记忆我出生在一个书香家庭,父亲虽是作家,但他很少用自己的文学理念影响我。在我的生活学习中,父亲就是一个很客观的教师,是我一生中最好的文学伴侣,最好的交流文学的朋友。父亲常与我沟通他最近读的好书,也会建议我去读。每天早上不管多忙,我都要拿出一小时与父亲喝咖啡,然后谈一谈我最近...