频道栏目
IT货架 > > 正文
Android AudioManager获取媒体焦点
网友分享于:Jan 1, 1970 8:00:00 AM    来源: IT货架   

标签:

 

Android是多任务系统,Audio系统是竞争资源。Android2.2之前,没有内建的机制来解决多个程序竞争Audio的问题,2.2引入了称作AudioFocus的机制来管理对Audio资源的竞争的管理与协调。本文主要讲解AudioFocus的使用。

按照AudioFocus的机制,在使用AudioStream之前,需要申请AudioFocus,在获得AudioFocus之后才可以使用相应的AudioStream;如果有别的程序竞争你正在使用的AudioStream,你的程序需要在收到通知之后做停止播放或者降低声音的处理。值得指出的是,这种机制是需要合作完成的,需要所有使用Audio资源的程序都按照这种机制来做,而如果有程序在它失去AudioFocus的时候仍然在使用Audio,AudioFocus拿它也没办法。而这一点对于开放系统的Android来说很致命的:用户可能安装没遵守这种机制的程序,或者版本太老还没引入这种机制的程序,这最终会导致很差的用户体验。

对于手机方案公司来说,要做的能做的事情就是教育和培训团队成员以保证自己内建的程序遵守机制没问题,这包括了Android原生的程序、自己开发的程序,以及适配第三方的程序。

一、AudioFocus的申请与释放

下面看与AudioFocus的相关的类:

 

获取/放弃AudioFocus的方法都在android.media.AudioManager中,获取AudioFocus用requestAudioFocus();用完之后,放弃AudioFocus,用abandonAudioFocus()

其中,参数

返回值,可能是:

 

二、AudioFocus被抢占与重新获得

由上节中知道,申请/释放AudioFocus时传入了AudioManager.OnAudioFocusChangeListener这个参数,其onAudioFocusChange()方法是Audio Focus被抢占与再次获得通知的地方。所以,每个要使用AudioFocus的程序都要小心实现这个函数,保证AudioFocus实现的一致性。

onAudioFocusChange()方法的focusChange参数指示了该AudioFocus的竞争者对AudioFocus的拥有情况,取值如下:

 

 

下面是onAudioFocusChange()方法处理的代码片段:

  1. OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() {  
  2.     public void onAudioFocusChange(int focusChange) {  
  3.         if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT  
  4.             // Pause playback   
  5.         } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {  
  6.             am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);  
  7.             am.abandonAudioFocus(afChangeListener);  
  8.             // Stop playback   
  9.         } else if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) {  
  10.             // Lower the volume   
  11.         } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {  
  12.             // Resume playback or Raise it back to normal   
  13.         }  
  14.     }  
  15. };   

 

==========================================================================

FROM: http://www.linuxidc.com/Linux/2012-04/57902.htm

Android AudioManager获取媒体焦点

标签:

广告服务联系QQ:1134687142 | 网站地图

版权所有: IT货架- 内容来自互联网,仅供用于技术学习,请遵循相关法律法规. 京ICP备11030978号-1