最近项目中遇到一个问题,app内音乐后台播放时,如果有电话或者微信视频通话进来,app后台音乐还在播放。这样就造成用户体验不好,研究了市面上的音乐播放器,比如网易云音乐就很好的做到了如果有微信视频或者语音通话进来时音乐暂停播放。微信视频挂断后继续播放音乐。
相关实现肯定是要监听音频相关的一些接口回调。研究了安卓的官方文档,终于找到解决方案。先贴出我的实现代码

##主要用到了:AudioManager.OnAudioFocusChangeListener

package qcl.com;import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;/*** Description:* Author     : qcl* Date       : 17/11/9*/public class PhoneService extends Service {private boolean isChangeToPause = false;// 电话管理器private TelephonyManager tm;// 监听器对象private MyListener listener;private AudioManager ams = null;//音频管理器@Overridepublic IBinder onBind(Intent intent) {return null;}/*** 服务创建的时候调用的方法*/@Overridepublic void onCreate() {// 后台监听电话的呼叫状态。// 得到电话管理器tm = (TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);listener = new MyListener();tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);initAudio();super.onCreate();}//微信,qq通话监听private void initAudio() {ams = (AudioManager) getSystemService(Context.AUDIO_SERVICE);ams.getMode();//这里getmode返回值为3时代表,接通qq或者微信电话ams.requestAudioFocus(mAudioFocusListener, 1, 1);}private class MyListener extends PhoneStateListener {// 当电话的呼叫状态发生变化的时候调用的方法@Overridepublic void onCallStateChanged(int state, String incomingNumber) {super.onCallStateChanged(state, incomingNumber);Log.d("qcl111", "state" + state);try {switch (state) {case TelephonyManager.CALL_STATE_IDLE://空闲状态。//继续播放音乐Log.v("myService", "空闲状态");break;case TelephonyManager.CALL_STATE_RINGING://铃响状态。//暂停播放音乐Log.v("myService", "铃响状态");break;case TelephonyManager.CALL_STATE_OFFHOOK://通话状态Log.v("myService", "通话状态");break;default:break;}} catch (Exception e) {e.printStackTrace();}}}private AudioManager.OnAudioFocusChangeListener mAudioFocusListener = new AudioManager.OnAudioFocusChangeListener() {public void onAudioFocusChange(int focusChange) {Log.d("qcl111", "focusChange----------" + focusChange);if (focusChange == 1) {//视频语音挂断状态if (isChangeToPause) {GlobalAudioManager.getInstance().playResume();Log.d("qcl111", "playResume()" + focusChange);}} else {//微信或者qq语音视频接通状态if (GlobalAudioManager.getInstance().isPlaying()) {isChangeToPause = true;GlobalAudioManager.getInstance().playPause();Log.d("qcl111", "playPause()" + focusChange);}}}};/*** 服务销毁的时候调用的方法*/@Overridepublic void onDestroy() {super.onDestroy();// 取消电话的监听,采取线程守护的方法,当一个服务关闭后,开启另外一个服务,除非你很快把两个服务同时关闭才能完成Intent i = new Intent(this, PhoneService2.class);startService(i);tm.listen(listener, PhoneStateListener.LISTEN_NONE);listener = null;ams.abandonAudioFocus(mAudioFocusListener);}}复制代码
后台音乐播放.png

根据上面的log可以看出focusChange为1时代表微信视频结束,我们这个时候继续我们的后台音乐播放。focusChange不为1时就暂停音乐播放。
这样就能实现像网易云音乐那样。在有微信或qq视频通话时暂停音乐播放。挂断时继续音乐播放。

转载于:https://juejin.im/post/5a0e6e706fb9a045067130e9

后台播放音乐时进来电话或微信视频通话暂停音乐播放 网易云音乐 喜马拉雅...相关推荐

  1. Manjaro快速上手指南-微信、TIM/QQ、网易云音乐、WPS等等

    笔者环境: 从一个好用的编辑器开始吧 vim sudo pacman -S vim 可能需要更新下库:sudo pacman -Syy 诶,还是安装失败了(没失败的跳过) 异常了类似与:/usr/bi ...

  2. 尚硅谷微信小程序开发 仿网易云音乐App 小程序 后端接口服务器搭建

    目录 小程序学习 视频相关的教程文档与笔记分享 配套服务器 源码地址: 接口使用说明文档 接口列表 启动服务 测试服务启动OK网页 http://localhost:3000/test.html​编辑 ...

  3. python网易云听歌时长_用Python爬取10w条网易云音乐热评并进行分析的方法总结

    有个段子讲"十年文案老司机,不如网易评论区,网易文豪遍地走,评论全部单身狗",网易云音乐的评论区也一直都是各类文案大神的聚集地. 那么我们普通用户到底如何成为网易云音乐评论里的热评 ...

  4. 微信小程序之简易网易云音乐

    (一)主要界面截图: 主页界面,主要通过HTML以及css代码            搜索界面,调用网易云音乐api接口,通过 完成                                  ...

  5. android 网易云音乐上滑动画,Android_Activity切换动画OverridePendingTransition(Cover 网易云音乐动画)...

    今天我想讲一个研究别人好动画的方法,并实现出来,我是网易云音乐的铁粉啊,很喜欢网易音乐那个开屏切换动画,还有点击一个页面然后返回的那个退出动画,所以呢,我把它实现出来了,还是蛮开心的,依然,我不讲那个 ...

  6. python音乐的数据抓取与分析_python抓取网易云音乐热评做词图数据分析

    最近就有一部"怀旧"题材的电影,未播先火,那就是刘若英的处女作--<后来的我们>.青春,爱情,梦想,一直是"怀旧"题材的核心要素,虽然电影现在还未上 ...

  7. python爬取音乐专辑时间_Python爬取披头士乐队历年专辑封面-网易云音乐

    运行环境 我的运行环境如下:系统版本 Windows10. Python版本 Python3.5,推荐使用Anaconda 这个科学计算版本,主要是因为它自带一个包管理工具,可以解决有些包安装错误的问 ...

  8. 【微信小程序学习】网易云音乐歌曲详情页代码实现

    这里记录一下做网易云小程序的音乐播放详情页面的代码. 音乐播放界面的主要的重点有几个: 1.磁盘和摇杆的旋转效果,这里运用了css的动画属性 2.音乐播放和暂停,下一首/上一首等播放效果的实现 3.进 ...

  9. 微信web开发者工具、网易云音乐、为知笔记等软件崩溃无法打开等问题的解决

    问题描述 更新了一波A卡驱动以后,很多电脑上的软件莫名开始出问题,表现为网易云没界面,但是进程存在:微信开发者工具黑屏:为知笔记错位等现象.不论是重装软件还是驱动还原都没办法解决,其中还伴随了一两次系 ...

最新文章

  1. python类的静态属性和静态方法_详解Python中的静态方法与类成员方法
  2. 独占电脑装linux,旧电脑如何处理?装Tiny Core,极致精简,超低CPU占用,你敢试吗...
  3. C语言过时了吗?不,我们需要的是一份个人成长
  4. MySQL笔记-MHA(Master High Availability)搭建
  5. 【LeetCode】剑指 Offer 68 - II. 二叉树的最近公共祖先
  6. 深圳市南山区派出所大全
  7. python opencv最小外接矩形中心点_Opencv绘制最小外接矩形、最小外接圆
  8. cpan安装_生信平台搭建(五):安装perl模块
  9. 当出现opencv的.dll无法找到的问题的时候用一下处理方法
  10. 机器学习笔记--基本概念
  11. 解构给默认值_使用 JavaScript 解构让代码更优雅
  12. open source Lrc歌词解析器发布
  13. bash 脚本编程 教程
  14. 写个单机版斗地主程序,复习c++面向对象
  15. 搭建表白网站详细教程,小白也可以学懂!!!!
  16. [悦读] 让听得见炮声的人来决策——《赋能》读书笔记
  17. Java面向对象高级部分——通过Class类实例化对象(五十二)
  18. 蓝桥杯 ADV168 算法提高 快乐司机(贪心 快排)(java)
  19. 关于谷歌眼镜的几点常见问题
  20. JAVA 打豆豆辅助工具

热门文章

  1. 求职中自我评价该怎么写?
  2. 2022年5月4号SSM框架整合学习四:
  3. Java【常见问题】List如何实现排序?
  4. matlab 软件怎么用,matlab怎么用 【解答方法】
  5. learning的反义词英文_英语反义词
  6. 能动的电脑配件「GitHub 热点速览 v.22.11」
  7. 输入银行卡号查询发卡行执行代码-立哥开发
  8. 【魔数 bug + 求助】挖槽,MP4 魔数变了?如何解决无法通过魔数判断 MP4 文件类型?
  9. Action与ActionListener的事件处理机制及实例分析
  10. 【win7】win7自带截图工具如何截菜单