扬声器听筒的切换-程序员宅基地

 

下午研究了一下扬声器听筒切换

如果需要保持插拔耳机之前的状态可以用我总结的代码:如果插耳机之前是扬声器,拔了之后还保存扬声器状态。

if (判断条件) {

        // 扬声器       

   [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord                      withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];

     } else {

        // 听筒

         [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];

    }

 

如果不需要:(enable是判断条件)

[[AVAudioSession sharedInstance] overrideOutputAudioPort:enable ? AVAudioSessionPortOverrideSpeaker:AVAudioSessionPortOverrideNone error:nil];

 

 

原文:http://blog.csdn.net/vieri_ch/article/details/43733375

本文部分翻译了官方对这两个属性的描述。链接如下,此外加入个人的使用体会

https://developer.apple.com/library/ios/qa/qa1754/_index.html

 

问题的起源,在iOS中,播放声音时,输出到扬声器的需求。两个属性设置的区别

The difference is that setting the AVAudioSessionPortOverride by calling overrideOutputAudioPort: is more transient than using the category option AVAudioSessionCategoryOptionDefaultToSpeaker.

通过overrideOutputAudioPort这个方法设置,属性AVAudioSessionPortOverride, 比使用AVAudioSessionCategoryOptionDefaultToSpeaker这个属性更短暂

e.g

方法1

[session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error];

 

方法2 ,

[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:&error];


方法1,设置之后,如果此时插入耳机,在拔掉。播放的声音会从听筒输出,而不是回到扬声器

方法2. 设置之后,始终输出到扬声器,而不是其他接收器,如果没有耳机。(简要的说,就是如果有个蓝牙音箱,哪怕接上都不会有声音输出到蓝牙音响,插上耳机,则会有声音输出到耳机。)

这里有个很重要的地方。这两个属性都只被用于。AVAudioSessionCategoryPlayAndRecord


使用场景的补充

 

如果在某个场景下,希望强制从speaker输出声音,最好使用

AVAudioSessionCategoryPlayback, 而不是 AVAudioSessionCategoryPlayAndRecord ,因为后者默认从听筒输出。无外接设备的情况。

 

[session setCategory:AVAudioSessionCategoryPlayback error:&error];


需要使用扬声器和听筒切换场景,用

AVAudioSessionCategoryPlayAndRecord


使用听筒之后,PlayandRecord下切换到扬声器

[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:&error]; 

 

这篇也有一定参考价值:

http://blog.csdn.net/xdrt81y/article/details/38926663

 

转载于:https://www.cnblogs.com/whqios/p/5356488.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/anting8900/article/details/102204730

智能推荐

poj1144-程序员宅基地

文章浏览阅读67次。http://poj.org/problem?id=1144求图中割点数目,只是输入处理比较麻烦,由于不知道有多长,所以需要字符输入然后转换成数字 1 #include <stdio.h> 2 #include <string.h> 3 #define SIZE 101 4 #define MIN(a,b) ((a)<(b)?(a):(b)) 5 bool..._poj1144 import java.io

【智能优化算法】鹦鹉优化算法附matlab代码-程序员宅基地

文章浏览阅读654次,点赞7次,收藏11次。鹦鹉优化算法(PO)是一种基于自然界鹦鹉群体行为的智能优化算法。它模拟了鹦鹉在觅食过程中通过信息共享和协作来提高觅食效率的行为。PSO算法的主要特点包括:**种群初始化:**随机初始化一组候选解,称为种群。**适应度计算:**评估每个候选解的适应度,即目标函数的值。**信息共享:**每个鹦鹉与种群中其他鹦鹉共享其当前位置和最佳位置的信息。**速度更新:**根据共享的信息,每个鹦鹉更新其速度,朝着更高适应度的区域移动。**位置更新:**根据更新的速度,每个鹦鹉更新其位置,探索新的候选解。

【车间调度】基于灰狼算法GWO求解置换流水车间调度问题PFSP含Matlab代码-程序员宅基地

文章浏览阅读19次。车间调度是生产管理中的重要环节,它涉及到如何合理安排生产任务和资源,以提高生产效率和降低成本。在车间调度中,置换流水车间调度问题(Permutation Flowshop Scheduling Problem,简称PFSP)是一种经典且复杂的调度问题。为了解决PFSP问题,研究人员提出了许多优化算法,其中灰狼算法(Grey Wolf Optimization,简称GWO)是一种被广泛应用的方法。灰狼算法是一种基于自然界中灰狼群体行为的优化算法。

HTML电子邮件的邮件格式_使得输入的数据为邮箱在html的格式是什么-程序员宅基地

文章浏览阅读4.7k次。电子邮件电子邮件发展至今,已经有几十年历史,仍然是很多人作为沟通、营销和通知的主要工具,特别是职场上。那么我们在编写一封邮件时,需要注意的邮件格式有哪些?邮件格式,其中包含很多学问:不同种类(纯文本类和HTML类)的邮件格式注意事项差别甚大。同一种类不同类型(通知、商务、书信等)的邮件格式事项不尽相同。统一类型不同场景也存在微妙的差别。所以我在这里只是概括个大概,不能一一详细说明。HT..._使得输入的数据为邮箱在html的格式是什么

【懒人系列】快手获取当前播放视频时长_kwai://work/5205035343338955636?source=bottom_reco-程序员宅基地

文章浏览阅读4k次。文章目录前言实现方法总结前言 上一篇文章我们留了个不大不小的问题:如何获取当前播放视频时长,进而视频播放完毕后自动翻页?现在我们通过快手极速版App进行探讨和实现。 众所周知,Android播放视频依赖播放组件类,而播放组件会有一些通用方法,比如开始、暂停、循环播放、设置播放位置、获取视频播放进度等,如果我们能Hook这些方法,就会获取当前播放组件的实例,通过实例再获取当前视频的时长。实现方法继续使用Frida神器,启动快手极速版的命令如下:frida -U -f com._kwai://work/5205035343338955636?source=bottom_recommend&enableslideplay=

GoF23 建造者模式学习笔记_gof23 笔记-程序员宅基地

文章浏览阅读119次。GoF23 建造者模式学习笔记 1. 建造者模式也属于创建型模式 2. 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 3. 主要作用:在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象优点: 1. 产品的建造和表示分离,实现了解耦;使用建造者模式可以使客户端不必知道内部组成细节 2. 将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰 3. 具体的建造者类之间相互独立(下面例子中表现为可以存在多种Worker),这有利于系统的扩 展_gof23 笔记

随便推点

基于javaweb的在线小说阅读系统(读者+作者+管理员)(java+ssm+jsp+mysql)_基于java web的在线阅读课程设计与实现-程序员宅基地

文章浏览阅读839次。基于javaweb的在线小说阅读系统(读者+作者+管理员)(java+ssm+jsp+mysql)运行环境Java≥8、MySQL≥5.7、Tomcat≥8开发工具eclipse/idea/myeclipse/sts等均可配置运行适用课程设计,大作业,毕业设计,项目练习,学习演示等功能说明![20220519002739](https://pic1.imgdb.cn/files/52560/project20/20220519002739.jpg)_基于java web的在线阅读课程设计与实现

VMware Centos7 安装Mysql、Node、NVM、Nginx等_centos nvm-程序员宅基地

文章浏览阅读1.6k次,点赞2次,收藏13次。为啥选择Mysql而不选择Oracle。MySQL一个关系数据库管理系统。中小型数据库。而Oracle是一个对象关系数据库管理系统,它属于大型数据库。其次Mysql的话体积小、速度快、维护成本低,重点它是开源免费的。所以各方面对于我们学习而言Mysql简直不要太贴合,对于前端开发人员来说,会执行sql脚本,会一些基本的CRUD(增加(Create)、读取(Read)、更新(Update)和删除(Delete))语法就差不多了。后面会继续更新后面会继续更新我是Etc.End。_centos nvm

GCC编译过程_在gcc的目录下不能编译-程序员宅基地

文章浏览阅读2.7k次,点赞3次,收藏30次。1. GCC定义目前 Linux 下最常用的 C 语言编译器是 GCC ( GNU Compiler Collection ),它是 GNU 项目中符合 ANSI C 标准的编译系统,能够编译用 C 、 C++ 和 Object C 等语言编写的程序。 GCC 不仅功能非常强大,结构也异常灵活。最值得称道的一点就是它可以通过不同的前端模块来支持各种语言,如Java 、 Fortran 、 Pas..._在gcc的目录下不能编译

接口调用-【3】讯飞离线命令词识别Windows/Linux_java调用讯飞离线版语音识别 linux-程序员宅基地

文章浏览阅读1k次,点赞3次,收藏4次。1、离线命令词识别调用主函数package com.iflytek;import com.iflytek.util.Step2_asr_thread;import com.iflytek.util.Step3_audioFormat;import java.util.Scanner;import javax.sound.sampled.AudioFormat;import javax.sound.sampled.AudioSystem;import javax.sound.sampled._java调用讯飞离线版语音识别 linux

关于BIOS的那些事----不要老整三岁的脑筋急转弯,咱们来整点五岁的(中)_整点五岁以下的-程序员宅基地

文章浏览阅读1.8k次。 现在来看第二部分,第二部分其实是把要用的模块文件压缩了一个接一个放在一起就行了。压缩算法的名字叫lh5,一提到算法,国内研究这种“低层次”东西的人就少了(大家都搞往窗体上拖放几个控件就能实现功能的高层次的应用程序)。好在我在国外的网站上无意中发现了lh5压缩算法的源码,用TC写的,我又从网上把TC这个老古董下载下来,最后居然编译成功了(当然做过一些修改),编译生成的文件名叫ar.exe(文中_整点五岁以下的

微信小程序 uniapp+vue课程教学在线学习考试系统-程序员宅基地

文章浏览阅读574次,点赞21次,收藏12次。本在线学习系统使用的框架为开源框架,在开发部署上具有一定的优势,可以帮助程序开发者快速构建基本的程序框架出来,通过调用开源框架可以减少程序开发者编写的代码量,从而提升在线学习系统的安全性和稳定性,这有益于程序开发者完成功能模块的处理和数据调用。本文设计目标为设计在线学习系统,在线学习系统是一种创新的系统,创新点包含了系统框架进行结合,在仔细研究了前后端开源框架之后,最后选择使用开源框架SpringBoot,且在开源框架的基础上实现了在线学习系统。(1)确定项目名称、项目研究内容,开题报告提交及修改。

推荐文章

热门文章

相关标签