有这么一种场景:你打开qq音乐、优酷客户端、视频播放的时候。这个时候突然来电显示了,此时所有的MediaPlayer相关的服务或者响应都进入“休眠”状态。那么,这个功能是怎么实现的呢?看到这篇文章的时候,原理其实很简单。只修要复制下面的d代码就能完成这个功能。

1、首先要创建一个AudioManager

//创建audioManger
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int result = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);

例如你在服务里面的onCreate方法里面完成的上面操作的。

2、让你的服务实现OnAudioFocusChangeListener接口:

例如:

public class AudioService extends Service implements OnAudioFocusChangeListener

3、实现该接口回调的方法。

/**---------------音频焦点处理相关的方法---------------**/
@Override
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN://你已经得到了音频焦点。
System.out.println("-------------AUDIOFOCUS_GAIN---------------");
// resume playback
mPlayer.start();
mPlayer.setVolume(1.0f, 1.0f);
break;
case AudioManager.AUDIOFOCUS_LOSS://你已经失去了音频焦点很长时间了。你必须停止所有的音频播放
System.out.println("-------------AUDIOFOCUS_LOSS---------------");
// Lost focus for an unbounded amount of time: stop playback and release media player
if (mPlayer.isPlaying())
mPlayer.stop();
mPlayer.release();
mPlayer = null;
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT://你暂时失去了音频焦点
System.out.println("-------------AUDIOFOCUS_LOSS_TRANSIENT---------------");
// Lost focus for a short time, but we have to stop
// playback. We don't release the media player because playback
// is likely to resume
if (mPlayer.isPlaying())
mPlayer.pause();
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK://你暂时失去了音频焦点,但你可以小声地继续播放音频(低音量)而不是完全扼杀音频。
System.out.println("-------------AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK---------------");
// Lost focus for a short time, but it's ok to keep playing
// at an attenuated level
if (mPlayer.isPlaying())
mPlayer.setVolume(0.1f, 0.1f);
break;
} }

简单的三步,就完成了一个强大的功能。

喜欢可以关注本博客哦~不定义更新简单有趣的Android小文

最新文章

  1. javascript for循环
  2. [BZOJ2391]Cirno的忧郁
  3. brew gradle
  4. REPL LOG
  5. 从客户端中检测到有潜在危险的request.form值
  6. 2014-4-25 运行号:837344 ASCII码排序
  7. Struts2的Action中如何操作作用域对象
  8. 经典线程同步 关键段CS
  9. 整理string类常见方法的使用说明
  10. Git CMD - fetch: Download objects and refs from another repository
  11. python 批量修改图片大小
  12. USB Type-C 连接器规范推出之后,市场很多低质量线材容易损坏设备
  13. 10.20_wiki
  14. 解决Ubuntu Server 12.04换了网卡MAC地址后 网络不可用的问题.
  15. 狗狗40题~ (Volume C)
  16. .NET中使用Redis(二)
  17. ResScope (软件资源分析)V1.94 绿色版
  18. NSRange:NSMakeRange
  19. XVIII Open Cup named after E.V. Pankratiev. Eastern Grand Prix
  20. cf——Sasha and a Bit of Relax(dp,math)

热门文章

  1. C++ 类模板与模板类详解
  2. 一起做orb-slam(2)
  3. [LeetCode] Solve the Equation 解方程
  4. shell入门笔记2:字符串、数组、echo与printf
  5. 详解vue移动端 下拉刷新
  6. python flask 基础入门
  7. C语言程序设计第三次作业——选择结构(1)
  8. linux安装ftp
  9. 报表生成工具 —— iText
  10. sqlserver批量更新数据