如何将 iPhone 音频路由到蓝牙耳机

2024-04-07

我正在尝试使用 AVAudioPlayer、AVAudioSession 和 AudioSessionSetProperty 将音频输出到蓝牙耳机(不是 A2DP)。

似乎有选择蓝牙耳机作为输入的函数(kAudioSessionProperty_OverrideCategoryEnableBluetoothInput),但没有用于设置输出的等效函数。这是在语音邮件应用程序中完成的,您可以在其中选择耳机、听筒扬声器或扬声器电话。我尝试了 SessionCategories 和 AudioSession 属性的各种组合,但我似乎找不到一种有效的方法。

我确信有人已经弄清楚了这一点,愿意分享一个例子吗?


这个小测试对我有用......它还涉及将蓝牙耳机设置为输入(不确定这是否是您想要的)。抱歉,代码的格式很糟糕......

// create and set up the audio session
AVAudioSession* audioSession = [AVAudioSession sharedInstance];
[audioSession setDelegate:self];
[audioSession setCategory: AVAudioSessionCategoryPlayAndRecord error: nil];
[audioSession setActive: YES error: nil];

// set up for bluetooth microphone input
UInt32 allowBluetoothInput = 1;
OSStatus stat = AudioSessionSetProperty (
                         kAudioSessionProperty_OverrideCategoryEnableBluetoothInput,
                         sizeof (allowBluetoothInput),
                         &allowBluetoothInput
                        );
NSLog(@"status = %x", stat);    // problem if this is not zero

// check the audio route
UInt32 size = sizeof(CFStringRef);
CFStringRef route;
OSStatus result = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &size, &route);
NSLog(@"route = %@", route);    
// if bluetooth headset connected, should be "HeadsetBT"
// if not connected, will be "ReceiverAndMicrophone"

// now, play a quick sound we put in the bundle (bomb.wav)
CFBundleRef mainBundle = CFBundleGetMainBundle();
CFURLRef        soundFileURLRef;
SystemSoundID   soundFileObject;
soundFileURLRef  = CFBundleCopyResourceURL (mainBundle,CFSTR ("bomb"),CFSTR ("wav"),NULL);
AudioServicesCreateSystemSoundID (soundFileURLRef,&soundFileObject);
AudioServicesPlaySystemSound (soundFileObject);     // should play into headset

希望有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 iPhone 音频路由到蓝牙耳机 的相关文章

随机推荐

  • Laravel 翻译 required_if 值

    我正在使用 Laravel 版本 5 2 45 目前我在翻译 required if 规则时遇到一些麻烦 当我使用 required if field value 时 它 会打印错误验证消息中的字段值 在本例中为 1 或 0 这不太可读 例
  • 如何对 LINQ to Objects 查询进行分区?

    这是一个资源分配问题 我的目标是运行查询来获取任何时间段的最高优先级班次 数据集非常大 对于此示例 假设 1000 家公司每个班次有 100 个班次 尽管实际数据集更大 它们都已加载到内存中 我需要对它们运行单个 LINQ to Objec
  • 具有不同图钉颜色的地图视图注释

    我有一个包含 200 多个对象的数组 我试图对每个对象执行循环 每个对象都有一个是 否字段 我想根据该是 否值显示不同颜色的标记 从我所看到的情况来看 我的循环首先遍历每个对象 然后在每个对象的末尾添加所有注释 由于当所有注释都添加到我的地
  • 如何使用 MSAL 对 AAD B2C 进行身份验证?

    我有一个使用 ADAL 的客户端 服务器身份验证的工作版本 但是 当您想要使用本地帐户 即 仅使用用户名或仅使用 AAD 之外没有支持身份验证器的电子邮件地址 时 B2C AAD 似乎无法与 ADAL 很好地配合 看来我们应该用于本地帐户的
  • 参考 Windows Powershell 中的弹出窗口

    我正在为我正在开发的网站进行测试自动化 我正在使用 Windows powershell 创建脚本来执行此操作 我的问题是我需要单击打开另一个窗口的链接 我需要以某种方式引用该窗口 ie new object com InternetExp
  • SQLite 数据到 RecyclerView

    该应用程序的数据存储在 SQLite 数据库中 UI 主要是 RecyclerView 问题是如何最好地将数据从数据库传输到 UI 同时保持主线程的运行 我原本计划使用 CursorLoader ContentProvider 和 Recy
  • 多维数组、可为 null 的引用类型和类型转换

    使用 C 8 的可空引用类型 我们可以编写 对于引用类型 T x T y x 但是 我无法理解多维和锯齿状数组的转换规则 string a new string 1 string b new string 1 string c new st
  • Haskell:ghci 是否显示“Chunk .. Empty”?

    向你学习 Haskell http learnyouahaskell com input and output bytestrings有一个这样的代码示例 ghci gt B pack 99 97 110 Chunk can Empty B
  • Grafana - 是否可以在基于 Loki 的仪表板查询中使用变量?

    我正在 Grafana 上开发基于 Loki 的仪表板 我有一个用于在 Loki 跟踪日志中搜索文本的面板 当前查询如下 job abc service searchTrace json line format if trace messa
  • 获取 rfc7517 格式的 JWKS for Firebase

    我正在使用 Firebase 对我的应用程序中的用户进行身份验证 Firebase 生成一个 JWT 令牌 我需要在我的服务器上对其进行身份验证 我使用 tyk io 来做到这一点 Tyk 支持这些令牌 但要求公钥的数据源位于https w
  • Swagger 将 IFormFile 参数列为“对象”类型

    我有一个控制器 它请求一个包含 IFormFile 作为其属性之一的模型 对于请求描述 Swagger UI 我使用 Swashbuckle 和 OpenApi 3 0 for NET Core 将文件属性的类型列出为类型对象 有没有办法让
  • 为什么 PeekMessage 总是返回 TRUE?

    Main message loop MSG msg ZeroMemory msg sizeof msg while msg message WM QUIT if PeekMessage msg NULL 0U 0U PM REMOVE Tr
  • 将 XSLT 转换作为构建步骤执行

    在 Visual Studio 构建期间 我需要从另一个 XML 文件生成一个 XML 文件 对我来说 很明显 XSLT 模板和转换正是我所需要的 我更喜欢实现此目的的方法是使用项目文件中的 自定义工具 属性 是否已经有一个内置工具可以用于
  • 如何在 Jetpack Compose 中实现这种布局

    我正在尝试使用新的 Jetpack Compose UI 框架 但遇到了问题 我想实现这个布局 在 xml 中很容易实现 但我无法弄清楚如何使垂直分隔线占用可用的垂直空间 而不指定固定的高度 我尝试过的这段代码似乎不起作用 Composab
  • 使用 Python ElementTree 迭代多个(父、子)节点

    Python 2 6 的 ElementTree 标准实现不提供从子节点指向父节点的指针 因此 如果需要父母 建议循环父母而不是孩子 考虑我的 xml 的形式
  • Facebook API - 如何获取用户的地址、电话号码?

    有谁能够使用 FQL 或 Graph api 获取 facebook 用户的地址 电话号码吗 已尝试以下 FQL 并且能够获取 基本信息 下的 当前城市 和 家乡 但无法获取 联系信息 下的 地址 或 电话 SELECT name firs
  • 在“同一行”显示 Django 表单字段

    我想在同一行上显示两个表单字段 而不是一个接一个地显示 目前 我得到 Choice a theme Datasystems Cameroun 但我想显示这个表格 例如 Choice a theme Datasystems Cameroun
  • 如何从 Android 设备获取 GMT 中的时区偏移量(如 GMT+7:00)?

    我正在得到timezone使用此代码的 Android 设备 TimeZone tz TimeZone getDefault String current Time Zone TimeZone getTimeZone tz getID ge
  • HTML5 画布/Flash。如何访问儿童影片剪辑并使其转到AndPlay?

    在 Flash 中 我的主时间轴中有 2 帧 第一个是选择语言 第二个包含导航栏 该导航栏是一个影片剪辑 其中包含项目 影片剪辑 这些 item movieclips 包含 2 个帧 每种语言一个 在 navigation bar movi
  • 如何将 iPhone 音频路由到蓝牙耳机

    我正在尝试使用 AVAudioPlayer AVAudioSession 和 AudioSessionSetProperty 将音频输出到蓝牙耳机 不是 A2DP 似乎有选择蓝牙耳机作为输入的函数 kAudioSessionProperty