我有两部手机配对并通过蓝牙连接。如何在一部手机上以编程方式检查另一部手机是否正在接听来电?我应该使用特定的配置文件,即PBAP还是HFP?如果是的话,我该怎么做?
一旦我发现这一点,如果我想通过连接的手机接听来电,我应该如何实现?
答案 0 :(得分:2)
下载Hands Free Profile pdf。它很容易买到。它为您提供有关HFP如何工作的所有详细信息以及HFP支持的用于通信的AT命令。没有可用的API。
正如eliasj所说,你需要实现HFP,当两部手机连接时,你可以通过AT命令在它们之间进行通信。
假设你有第一部手机是Android设备和第二部手机Android或任何设备,它们都是通过HFP连接的。
我没有完整的代码,但我可以建议你一些AT命令 -
1.使用 AT + CIND?命令可以读取其他手机的指示灯状态
2.要启用指标状态更改报告,您需要使用 AT + CMER = 3,0,0,1 命令。
3.一旦您收到来自AT + CMER'的有效回复。命令,您可以使用AlarmManager启动一个连续读取蓝牙套接字输入流的服务
4.由于步骤2.如果第二部电话有来电,蓝牙插座的输入流将包含 RING 作为警报。
我使用过实现Runnable的服务。以下是步骤4的示例代码.-
public void run()
{
try
{
// Get input and output streams from Bluetooth socket.
m_oInputStream = m_oBluetoothSocket.getInputStream();
m_oOutputStream = m_oBluetoothSocket.getOutputStream();
// Read input stream for +CIEV response is given or not.
byte[] buffer = new byte[200];
int nNumberOfBytesRead = m_oInputStream.read(buffer);
String strResponse = new String(buffer).trim();
if(true == strResponse.contains("RING"))
{
// Contains RING Alert. Answer the call.
// Start Activity for handling Incoming Call.
Intent oIncomingCallActivityIntent = new Intent(getApplicationContext(), IncomingCallActivity.class);
oIncomingCallActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
getApplicationContext().startActivity(oIncomingCallActivityIntent);
// Stop service.
stopSelf();
}
}
catch(Exception e)
{
// Log the error.
}
}
您需要实现处理来电的活动。它会接受或拒绝来电。要接受来电,请使用 AT + ATA 命令。你会收到"好的"作为第二部电话的回复。
我希望这会对你有所帮助。
答案 1 :(得分:0)
你应该实施HFP(免提方面)。当我在一年前看到这个问题时,无法将音频发送到手机(Android),但它现在可能有所改变。
查看How to send AT commands based on BT Hands-Free profile in android?中的问答(点击如何连接)和HFP规范https://www.bluetooth.org/docman/handlers/downloaddoc.ashx?doc_id=238193(关于配置文件的工作方式(第36页上的来电))