【问题标题】:How to check at one phone whether the other phone is getting an incoming call?如何在一部手机上查看另一部手机是否有来电?
【发布时间】:2014-06-05 11:25:40
【问题描述】:

我有两部通过蓝牙配对和连接的手机。如何以编程方式在一部手机端检查另一部手机是否有来电?我应该为此使用特定的配置文件,即 PBAP 还是 HFP?如果是,我该怎么做?

一旦我检测到这一点,如果我想通过连接的电话接听来电,我应该如何实现?

【问题讨论】:

  • 请告诉我投反对票的原因。如果需要任何进一步的说明,我愿意提供。
  • @SoulRayder- 我正在尝试通过将 AG 用作 ANDROID 手机 (SAMSUNG S DUOS) 并将另一侧的 HF 用作 CSR 8670 蓝牙音频套件来做同样的事情。你能帮帮我吗,你是如何转移 AT COMMANDS 的,我必须做些什么改变才能使它有价值。
  • 此链接可能对您在命令stackoverflow.com/questions/16610811/… 处传输有所帮助。但由于它是车载套件,您必须找到类似的方式来传输命令,因为上述链接适用于android平台。
  • 我正在尝试同样的事情,并且有一些问题,例如这种方法是否可以接听其他电话的电话,或者您是否只收到通知?如果我能得到一些源代码,对我有很大帮助,谢谢

标签: android bluetooth android-bluetooth


【解决方案1】:

下载免提简介 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,它会启动一个服务,持续读取蓝牙Socket的输入流。
4.由于步骤2.,如果第二部手机有来电,蓝牙Socket的输入流将包含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命令。您将收到来自第二部手机的“OK”作为回复。

我希望这会对你有所帮助。

【讨论】:

  • 一旦你从'AT+CMER'命令得到有效响应:有效响应是什么意思?我应该投票响应“OK”吗?
  • 当我尝试第 1 步时,我得到一个响应 +CIND: 和用逗号分隔的六个数字。现在这些是什么意思?在pdf中,没有给出这个解释。请帮忙。
  • 我想通了:)。谢谢你的帮助。但是,如果我希望对此进行持续监控,我应该怎么做,即使在我收到一个来电通知之后,即使在那之后我也应该能够获得更多这样的通知。该怎么做呢?
  • 我使用了 AlarmManager,它以特定的时间间隔启动我的服务。在服务中,我使用了上面的代码来读取 InputStream 并检查“RING”警报。我不确定这是否是一种好方法,因为它肯定会导致电池耗尽。
  • 我已经完成了你在异步任务中提到的内容。但是,一旦我接到一个来电,它现在就会显示通知并完成。但我不希望它完成,它应该持续运行并在我接到来电时给我通知,至少当我在同一个活动中时。您对解决此问题的最佳方法有何建议?
【解决方案2】:

您应该实施 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 中的 Q/A(了解配置文件的工作原理(第 36 页的来电))

【讨论】:

    猜你喜欢
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多