如何通过 Android 中的免提音频网关通过 AG 发起来自 HF 的呼叫?
Posted
技术标签:
【中文标题】如何通过 Android 中的免提音频网关通过 AG 发起来自 HF 的呼叫?【英文标题】:How to initiate a call from HF through AG via Handfree Audio Gateway in Android? 【发布时间】:2014-06-17 07:21:39 【问题描述】:到目前为止,我已经能够通过蓝牙连接从加载了我的应用程序的手机(HF 或免提)向目标手机发起呼叫,从 android 手机 AG(音频网关) .我已将此代码用于此过程:
///////////////////////////////////////////////////////////////////////////////
//Here, how to establish voice connectivity from AG to my phone(HF)?
//////////////////////////////////////////////////////////////////////////////
// Calling the target phone from the AG via the HF using bluetooth Handfree Audio Gateway
try
mmOutStream.write(("ATD"+phone_number+"\r").getBytes());
catch (IOException e1)
// TODO Auto-generated catch block
e1.printStackTrace();
try
Thread.sleep(1000);
catch (InterruptedException e)
// TODO Auto-generated catch block
e.printStackTrace();
现在,我可以通过免提 (HF) 设备拨打电话,但我无法听到铃声或对方说话。
到目前为止,我似乎刚刚能够触发调用机制。如何建立音频连接,以便我既能听到目标手机上的扬声器也能说话?
【问题讨论】:
【参考方案1】:您似乎正在尝试在电话上实现免提单元角色。 这样做的一种方法是,如果您有 2 部电话,电话 A(表现为 AG),电话 B(免提单元)然后
电话 B 需要向电话 A 发送适当的 AT 命令,以使其自身显示为蓝牙耳机。如果这样做正确,那么我认为电话 A 不需要任何更改即可将音频路由到蓝牙 SCO 链接。要查看免提单元发送了哪些 AT 命令,连接到标准蓝牙耳机的电话 A (AG) 的日志可能会有所帮助。或免提规范。
在电话 B 上,假设所有 AT 命令已发送到电话 A 以使其自身显示为 HF 单元,然后通过从电话 B 发送 ATD 来建立呼叫(电话 A 到远程方) , 电话 A 可以像使用标准蓝牙耳机一样设置 SCO。 如果没有,那么电话 B 可能必须调用 AudioManager.startBluetoothSco() 来设置 SCO。 除了设置 SCO 之外,电话 B 还必须将音频路由到 SCO。我认为 API 是 AudioManager.SetMode() 和 AudioManager.setBluetoothScoOn()。
【讨论】:
是的,但是如何让 HF 在 AG 看来就像一个蓝牙耳机? HFU 必须使用 uuid 为 HFU 注册 RFCOMM 服务器,一旦连接成功,向 AG 发送 AT 命令(AT+BRSF 等)。您可能会发现此链接很有用***.com/questions/16610811/… 我已经在使用您提供的链接:)。目前我正在使用它本身(免提音频网关)。但显然,使用它进行连接并不足以使 HF 看起来像 AG 的耳机。我也尝试过(耳机音频网关),但效果不大。 AG 没有其他相关服务可用(我以编程方式检查)。所以我被困住了。 我认为您无法连接 AG-AG。在 HF 端,您是否为 HFU 注册了一个带有相应 SDP 记录的 RFCOMM 套接字?适配器.listenUsingRfcommWithServiceRecord。 AG 和 HFU 有不同的 UUID。这将允许 AG 连接到 HF。另外我认为 HF 侧的设备类别需要更新为音频主要设备和免提次要设备。我不确定是否有 API 可以做到这一点.. 问题是要求我只控制 HF 端,而在 AG 端我不应该以编程方式做任何事情。以上是关于如何通过 Android 中的免提音频网关通过 AG 发起来自 HF 的呼叫?的主要内容,如果未能解决你的问题,请参考以下文章
CoreBluetooth 或 EAAccessoryManager 和免提