今天在跑一家面试的时候被问到能不能实现皮皮蟹的录音播放功能:

概括起来就是在皮皮蟹里面选择需要播放的音频,保存到本地,然后跳转到微信点击录音的时候播放该音频,乍看一下感觉这个问题其实挺简单的,但是后面尝试了一下其实并不简单。

思路1:

通过判断麦克风是否被占用来获取在微信中录音的行为"回调",百度出来的方法大同小异,都是:

    private boolean validateMicAvailability(){Boolean available = true;recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, 44100,AudioFormat.CHANNEL_IN_MONO,AudioFormat.ENCODING_DEFAULT, 44100);if (recorder == null )  {return false;}try{if(recorder.getRecordingState() != AudioRecord.RECORDSTATE_STOPPED ){available = false;}recorder.startRecording();if(recorder.getRecordingState() != AudioRecord.RECORDSTATE_RECORDING){recorder.stop();available = false;}recorder.stop();} finally{if (recorder!=null) {recorder.release();recorder = null;}}return available;}

然后测试的思路是开启一个Service,在服务里运行timetask去循环判断,如果返回值为false说明当前有其他程序正在占用麦克风,则此时用户在微信点击了麦克风,就可以播放本地的音频了。

但是实际运行的时候出现了问题,微信会弹出一个当前有其他程序正在录音的弹窗,明显皮皮蟹是没有这个弹窗的,所以思路1pass。

思路2:

注意到皮皮蟹是有悬浮窗权限的,也有悬浮窗,当时有想是不是通过判断微信的悬浮窗来得知用户按下了录音按钮,但是后面把皮皮蟹的悬浮窗权限关了,他还是可以实现监听。思路2pass。

思路3:

最后在参考文章:https://stackoverflow.com/questions/12018927/check-if-android-mic-is-being-used-by-another-app/12019367?r=SearchResults#12019367 时,虽然答主没有给出具体的解决方案,但是有提到通过AudioManager去解决这个问题,然后我就试了am.isMicrophoneMute(),发现无法解决,最后,使用requestAudioFocus解决了问题,以下是代码:

 AudioManager am;am = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE);int result = am.requestAudioFocus(new AudioManager.OnAudioFocusChangeListener() {@Overridepublic void onAudioFocusChange(int focusChange) {LogUtils.d("nangua : " + focusChange);}},AudioManager.STREAM_MUSIC,AudioManager.AUDIOFOCUS_GAIN);

平时focusChange返回的结果是1,当跳转到其他app比如微信里面,点击录音按钮时会返回2.

以上,就是实现皮皮蟹最重要的功能的关键所在哈哈哈,搞了半天终于有了正解。

Andorid实现皮皮蟹App的核心功能-语音播放相关推荐

  1. 社交APP的核心功能都有哪些

    社交APP的核心功能都有哪些 社交软件给人们带来了社交的便利性,那么社交APP的核心功能有哪些呢? 1.实名认证:要求每一位注册的用户提供真实有效的资料,通过平台的认可方可进入. 2.在线聊天:用户可 ...

  2. 英语口语训练APP开发核心功能

    英语口语训练APP开发,英语口语训练APP开发核心功能.你有没有那么一些情况下,应对老外只有生憋出一两句简单的英文语句,而此刻大家经常会后悔莫及自身当时没有好好地学习英语口语,而以便让大家能在日常生活 ...

  3. 多功能语音播放器上线啦~

    应广大学生反映,学程序不会读单词,留言问我能不能做个语音播放器,就是能输入英文能读出来的那种!! 为了帮助公众号里面仅有的几百粉丝,我就顺手写一个吧,万一还能增加点粉丝呢? 于是经过一番奋斗,一款名为 ...

  4. aws cognito_AWS Cognito的用户管理—(2/3)核心功能

    aws cognito by Kangze Huang 黄康泽 AWS Cognito的用户管理-(2/3)核心功能 (User Management with AWS Cognito - (2/3) ...

  5. 新闻资讯java开发_新闻资讯app开发的功能与意义

    获取新闻的目的因人而异,但对获取新闻的需求是一样的.现在是移动互联网的时代.人们不再想依靠传统的手段,而把便利作为获取服务的核心.因此,开发新闻咨询app是必要的.其到来不仅意味着获得新闻登上新的阶梯 ...

  6. 火焰纹章核心功能的实现

    "火焰纹章"核心功能的实现 第一关预览 用到的软件 1.PngSplit: 用于将整图分割为一个个的素材,对帧动画有特效 2.Cocos2d-x: 代码和UI分开操作,减少了程序和 ...

  7. 上门洗车软件的核心功能和技术选型

    一.上门洗车软件的核心功能一般包括以下几个方面: 1.预约服务:用户可以在上门洗车软件上进行车辆预约,选择洗车.打蜡.除臭等服务以及时间和地址等信息,方便用户安排车辆清洗的时间和地点. 2.订单管理: ...

  8. 云直播SDK核心功能对比|腾讯云、阿里云、声网、即构等SDK厂商对比

    直播业务概述 大家所熟知的直播平台虎牙.斗鱼.快手.抖音.B站,直播功能看似普遍,但从零到一开发却不简单.直播中运用到的技术难点非常之多,音频视频处理/编解码,前后处理,直播分发,即时通讯等技术,学好 ...

  9. android 老年模式 oppo,善用手机“老人模式”,OPPO这几大核心功能很关键

    原标题:善用手机"老人模式",OPPO这几大核心功能很关键 去年年底,据工信部统计数据了解,我国使用手机的老年用户约2.74亿,其中有1.4亿还在使用功能手机,意味着这部分的老年用 ...

最新文章

  1. 7-18 银行业务队列简单模拟 (25 分)
  2. MVC项目开发中那些用到的知识点(Asp.Net Mvc3.0 Areas)
  3. python 自定义函数和循环_Python循环语句——对for循环和while循环应用自定义函数公式的实践,套用,练习...
  4. 计组第一章(唐朔飞)——计算机系统概述章节总结
  5. 关于阿里面试的一个小题(推荐)
  6. 简单的 php 防注入、防跨站 函数
  7. HTTP 301 跳转和302跳转的区别
  8. 2020牛客NOIP赛前集训营提高组(第四场)B-色球【链表】
  9. 一个基于 SpringBoot 开源的小说和漫画在线阅读网站,简洁大方、强烈推荐
  10. Android Instant Apps教程
  11. 智能优化算法:类电磁机制算法 - 附代码
  12. 如何证明永动机不可能制造出来
  13. 我眼中的《APUE》
  14. uni中一些插件的使用
  15. UVA12716 LA6657 GCD XOR【GCD+位运算+前缀和】
  16. 创业过程中不要被理想主义所牵绊
  17. YOLOv3 论文精读
  18. 15张超详细的Python学习路线图,纯良心分享,零基础学习宝典
  19. C#实战项目~智能图书管理系统
  20. 【异周话题 第 16 期】2018年,你最期待的前端开发技术有哪些?

热门文章

  1. 利用Python中的PIL库去处理图片
  2. Access用OleDbParameter无法更新数据解决方案
  3. Java 使用 commons-fileupload 实现文件上传工具类
  4. 阿里开源一站式分布式事务框架seata源码分析(AT模式下TM与RM分析)
  5. 通过HuTool工具类和oshi查询cpu使用率、内存大小、磁盘空间等
  6. MySQL 数据库连接使用
  7. linux通过指定网卡发送 数据,实现方式
  8. 一个微信小程序云函数例子(详细)
  9. 台式计算机cpu是什么,台式电脑CPU是几核怎么查看
  10. ThinkServer RD450 2008R2 64位 驱动备份,这是用360驱动大师备份的驱动。