如何在安卓系统中基于蓝牙免提配置发送AT指令?

9

我正在尝试在Handsfree配置文件下,使用以下代码在Android设备与其他手机之间建立蓝牙连接。

private static final UUID MY_UUID = UUID.fromString("0000111F-0000-1000-8000-00805F9B34FB"); // UUID for Hands free profile   

// Some code...

// Get Bluetooth Adapter.
m_oBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

// Some code...

// For paired BT device, getting a connection established.
if(null != m_oBluetoothDevice)
{
    if(BluetoothDevice.BOND_BONDED == m_oBluetoothDevice.getBondState())
    {
        try
        {
            m_oBluetoothSocket = m_oBluetoothDevice.createRfcommSocketToServiceRecord(MY_UUID);     
            m_oBluetoothSocket.connect();

            Log.i(TAG, "Socket Connected");

        }
        catch(Exception e)
        {
            if(null != m_oBluetoothSocket)
            {
                Log.i(TAG, "Closing socket");
                try 
                {
                    m_oBluetoothSocket.close();
                }
                catch (Exception e1) 
                {
                    Log.i(TAG, "Error while closing socket : " + e1.getMessage());
                }
            }
        }               
    }
}

我可以使用以下代码创建RFCOMMSocket。

``` 我可以使用以下代码创建RFCOMMSocket。 ```

现在,我想基于蓝牙免提配置文件发送AT命令。例如,如果其他手机接收到电话,我的Android设备可以通过发送AT命令"+CHUP"拒绝此通话。我不确定是否可能实现。

``` 现在,我想基于蓝牙免提配置文件发送AT命令。例如,如果其他手机接收到电话,我的Android设备可以通过发送AT命令"+CHUP"拒绝此通话。我不确定是否可能实现。 ```

目前,我遇到了困难。我已经阅读了蓝牙API文档,其中发现了-

``` 目前,我遇到了困难。我已经阅读了蓝牙API文档,其中发现了- ```
     BluetoothHeadset.ACTION_VENDOR_SPECIFIC_HEADSET_EVENT

我们能够使用这个Intent来发送AT指令吗?这是基于蓝牙免提配置文件发送AT命令的正确方式吗?请有人帮助我并给出适当的方向。

您所有的输入对我来说都将是巨大的帮助。

提前致谢。


请有人帮帮我。我还是无法解决这个问题。 - KavitaDev
我正在尝试同样的事情,有一些问题,比如说这种方法是否可行,可以从其他手机接收电话,还是只能收到通知呢? 如果你能提供一些源代码那就太好了,谢谢。 - rajithShetty
2个回答

11

您需要创建InputStream和OutputStream,以便与手机通信:

mmInStream = m_oBluetoothSocket.getInputStream();
mmOutStream = m_oBluetoothSocket.getOutputStream();

为建立 HFP 连接,您需要开始发送:

mmOutStream.write("AT+BRSF=20\r".getBytes());

20代表你支持HFP的代码。

而要从手机上读取:

buffer = new byte[200];
mmInStream.read(buffer);
command = new String(buffer).trim();

现在您可以在设备之间进行通信,并且您可以在https://www.bluetooth.org/docman/handlers/downloaddoc.ashx?doc_id=238193上阅读有关免提配置文件的更多信息。


嗨eliasj,我已经按照您的代码进行操作,并且它对我有很大帮助。 我已经在我的安卓手机和其他手机之间建立了连接。 我已经按照您在答案中指定的方法发送了一些AT命令。 现在,我正在尝试通过发送AT命令来使用我的应用程序挂断来电。 但我还在为此苦苦挣扎。 尽管您的答案为我提供了正确的方向,但如果您能在此事上帮助我,我将非常感激。 非常感谢! - KavitaDev
@KavitaDev 挂断电话的命令是 mmOutStream.write("AT+CHUP\r".getBytes());。这些都在协议规范中 (在我的回答末尾的链接里)。 - eliasj
是的,eliasj,我按照你在答案中指定的PDF进行了操作,最终成功完成了处理活动通话所需的所有步骤。非常感谢。 - KavitaDev
@eliasj:你能告诉我如何使用BluetoothHeadset对象在手机上发送HFP命令并接收命令吗? - Kaushik
如果我没记错的话,BluetoothHeadset 是用来与蓝牙耳机设备通信的。这是用于模拟耳机设备的代码。 - eliasj
显示剩余3条评论


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接