我的要求是开发一个应用程序,该应用程序将使用免提配置文件通过蓝牙 [配对] 接听电话、断开呼叫并拨打免提电话到 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\r
用AT+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 手机获得适当的响应,但在接到电话后,我无法说话和听到。
请帮助我。