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机制,不然会给用户带来不好的体验。

更多相关文章

  1. Android录音,和实现微信长按录音效果!
  2. Android(安卓)布局
  3. Android(安卓)JNI 获取应用程序签名
  4. TextView 设置背景【点击或获得焦点改变背景】
  5. android 定义 程序 Scheme 接收特定URI开启Activity
  6. Android(安卓)获得手机屏幕大小
  7. Android获取WIFI状态下的IP地址以及MAC地址
  8. android SearchView 失去焦点
  9. Android(安卓)服务器连接工具类HttpUtil

随机推荐

  1. android屏幕适配,除了使用dp,还可以使用比
  2. Android用Broadcast实现EventBus的功能和
  3. android apk 加固
  4. Android应用程序的编译流程及使用Ant编译
  5. android setVisibility(GONE)不及时刷新
  6. 爱情银行 android首发
  7. 移动大变局下的抉择—移动开发者大会刊首
  8. mac下Android(安卓)Studio常用的一些快捷
  9. 你真的懂Android(安卓)Handler吗?(二)
  10. Android记事本NotePad应用功能拓展