1

我的要求是开发一个应用程序,该应用程序将使用免提配置文件通过蓝牙 [配对] 接听电话、断开呼叫并拨打免提电话到 android 手机的号码。

注意:我正在尝试将一部手机设为免提,而另一部手机则尝试通过蓝牙配对,如果手机打来电话,我应该能够从免提手机接听和讲话。这可能吗???

在抓取 n 个帖子后,我可以将 AT 命令从免提设备发送到 Android 手机。因此,如果我在 Android 手机中接到电话,我可以断开呼叫,并且我可以通过在免提中运行以下代码从免提设备拨打电话。

m_oBluetoothSocket = btDevice.createRfcommSocketToServiceRecord(MY_UUID);
Log.i("Not Connected +:  ", "Socket Connected");

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

// AT command to receive call
 mmOutStream.write("ATA\r".getBytes());
    dis = new DataInputStream(mmInStream);
    av = dis.available();
    if (av != 0) {
        byte[] b = new byte[av];
        dis.read(b);
        System.out.println(new String(b) + "Recieved form modem");
}

要断开呼叫,我ATA\rAT+CHUP命令替换。

我面临的问题是接到电话后,我无法说话或听到,也无法与手机进行音频通信。

我按照本指南来实现这一点,但在接到免提电话后,我无法进行音频通信。

http://www.mcpc-jp.org/news/pdf/CCAP_Guideline_Ver10a.pdf

在上面的文档中,我遵循了 6.2.5.1。使用以下代码应答来自 HF(无带内振铃)部分的来电。

m_oBluetoothSocket = btDevice.createRfcommSocketToServiceRecord(MY_UUID);
Log.i("Not Connected +:  ", "Socket Connected");

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

 mmOutStream.write("AT+CIND=?\r".getBytes());
 DataInputStream dis = new DataInputStream(mmInStream);
    int av = dis.available();
    if (av != 0) {
        byte[] b = new byte[av];
        dis.read(b);
        System.out.println(new String(b) + "CIND=? Recieved form modem");
 }

mmOutStream.write("AT+CIND?\r".getBytes());
dis = new DataInputStream(mmInStream);
av = dis.available();
if (av != 0) {
    byte[] b = new byte[av];
    dis.read(b);
    System.out.println(new String(b)
            + "CIND Recieved form modem");
}

mmOutStream.write("AT+CMER\r".getBytes());
dis = new DataInputStream(mmInStream);
av = dis.available();
if (av != 0) {
    byte[] b = new byte[av];
    dis.read(b);
    System.out.println(new String(b) + "NREC Recieved form modem");
}

mmOutStream.write("AT+NREC=0\r".getBytes());
dis = new DataInputStream(mmInStream);
av = dis.available();
if (av != 0) {
    byte[] b = new byte[av];
    dis.read(b);
    System.out.println(new String(b) + "NREC Recieved form modem");
}

mmOutStream.write("AT+CHLD=?\r".getBytes());
dis = new DataInputStream(mmInStream);
av = dis.available();
if (av != 0) {
    byte[] b = new byte[av];
    dis.read(b);
    System.out.println(new String(b) + "CHLD  Recieved form modem");
}

mmOutStream.write("ATA=?\r".getBytes());
dis = new DataInputStream(mmInStream);
av = dis.available();
if (av != 0) {
    byte[] b = new byte[av];
    dis.read(b);
    System.out.println(new String(b) + "CHLD  Recieved form modem");
}

清单文件中存在权限。

<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.BROADCAST_STICKY"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

我能够从 Android 手机获得适当的响应,但在接到电话后,我无法说话和听到。

请帮助我。

4

0 回答 0