我正在尝试为某人提供诸如手机之类的蓝牙设备的“单击拨号”解决方案。我一直在尝试使用32feet.net蓝牙api。
自从通过蓝牙串行端口发出at命令以来,我还没有真正对蓝牙做任何事情,但是我已经将相关设备配对了,该设备支持与PC的免提服务。我有以下代码尝试连接并发送拨号命令。
String deviceAddr = "11:11:11:11:11:11";
BluetoothAddress addr = BluetoothAddress.Parse(deviceAddr);
BluetoothEndPoint rep = new BluetoothEndPoint(addr, BluetoothService.Handsfree);
BluetoothClient cli = new BluetoothClient();
cli.Connect(rep);
Stream peerStream = cli.GetStream();
String dialCmd = "ATD 0000000000\r\n";
Byte[] dcB = System.Text.Encoding.ASCII.GetBytes(dialCmd);
peerStream.Write(dcB, 0, dcB.Length);
// Begin Edit ------------------------------------------------------------
Byte[] sResponse = new Byte[100];
peerStream.Read(sResponse, 0, 99);
TextBox1.Text = System.Text.Encoding.ASCII.GetString(sResponse);
// End Edit --------------------------------------------------------------
peerStream.Close();
cli.Close();
MessageBox.Show("Done");
由于它似乎遍历了这些代码行,因此需要花费适当的时间在相关位置进行连接,或者在设备地址错误且无法连接时崩溃。显然,AT命令不是发送它的正确方法。
有人可以启发我有关通过免提配置文件发送到蓝牙设备以使其拨号所需的信息吗?
开始编辑-------------------------------------------
我决定从流中读取内容,并通过发送AT命令后看看是否有任何响应。由于我只是在测试是否可以正常工作,因此我只是将响应转储到文本框中。
我从流中读取的响应是:
ERROR
似乎没有错误代码或任何东西。
结束编辑---------------------------------------------
编辑 - - - - - - - - - - - - - - - - - - - - - - - - - --
发送命令:AT + CMER\r
结果:OK
然后
发送命令:AT + CIND =?\r
结果 :
+ CIND:(“服务”,(0-1)),(“通话”,(0-1)),(“通话设置”,(0-3)),(“battchg”,(0-5)) ,(“signal”,(0-5)),(“roam”,(0-1)),(“callheld”,(0-2))
然后
发送命令:ATD 0000000000\r
结果:
好的
D :(“服务”,(0-1)),(“调用”,(0-1)),(“callsetup”,(0-3)),(“battchg”,(0-5)), (“信号”,(0-5)),(“漫游”,(0-1)),(“调用者”,(0-2))
仍然实际上并没有拨:(
结束编辑----------------------------------------------
解决方案 - - - - - - - - - - - - - - - - - - - - - - -
现在,以下代码可通过我的iPhone拨号。目前,这确实很困难,因为我一直在测试是否可以使它正常工作。对于其他想要做类似事情的人来说,这已经足够入门。
String deviceAddr = "00:00:00:00:00:00";
BluetoothAddress addr = BluetoothAddress.Parse(deviceAddr);
BluetoothEndPoint rep = new BluetoothEndPoint(addr, BluetoothService.Handsfree);
BluetoothClient cli = new BluetoothClient();
cli.Connect(rep);
Stream peerStream = cli.GetStream();
String dialCmd1 = "AT+CMER\r";
String dialCmd2 = "AT+CIND=?\r";
String dialCmd3 = "AT+BRSF=\r";
String dialCmd4 = "ATD 0000000000;\r";
Byte[] dcB = System.Text.Encoding.ASCII.GetBytes(dialCmd1);
peerStream.Write(dcB, 0, dcB.Length);
Byte[] sRes = new Byte[200];
peerStream.Read(sRes, 0, 199);
textBox1.Text = textBox1.Text + "\n\r----------\n\r" + System.Text.Encoding.ASCII.GetString(sRes);
dcB = System.Text.Encoding.ASCII.GetBytes(dialCmd2);
peerStream.Write(dcB, 0, dcB.Length);
peerStream.Read(sRes, 0, 199);
textBox1.Text = textBox1.Text + "\n\r----------\n\r" + System.Text.Encoding.ASCII.GetString(sRes);
dcB = System.Text.Encoding.ASCII.GetBytes(dialCmd3);
peerStream.Write(dcB, 0, dcB.Length);
peerStream.Read(sRes, 0, 199);
textBox1.Text = textBox1.Text + "\n\r----------\n\r" + System.Text.Encoding.ASCII.GetString(sRes);
dcB = System.Text.Encoding.ASCII.GetBytes(dialCmd4);
peerStream.Write(dcB, 0, dcB.Length);
peerStream.Read(sRes, 0, 199);
textBox1.Text = textBox1.Text + "\n\r----------\n\r" + System.Text.Encoding.ASCII.GetString(sRes);
peerStream.Close();
cli.Close();
最佳答案
尝试查找对AT\r(或)ATH\r的响应是什么。
如果响应是“OK\r\n”,请尝试在ATD和数字后面没有空格的拨号命令。
关于c# - 具有32feet.net和C#的蓝牙拨号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5960208/