以下是我目前拥有的代码:
string sendMessage = ""; sendMessage = File.ReadAllText(file_path); BluetoothClient btClient = new BluetoothClient(); btClient.Connect(btEp); Stream clientStream = btClient.GetStream(); using (StreamWriter utfWriter = new StreamWriter(clientStream,Encoding.UTF8)) { utfWriter.Write(sendMessage); }
btEp是一个蓝牙端点,传递给发送消息的功能,并在其他地方定义如下:
BluetoothEndPoint BtEp;
这是使用变量构建的:
BtEp = new BluetoothEndPoint(device.DeviceInfo,mapServiceId);
- mapServiceId {00001132-0000-1000-8000-00805f9b34fb} System.Guid + BtEp {BC20A4164A8C:0000113200001000800000805f9b34fb} InTheHand.Net.BluetoothEndPoint
BC20A4164A8C是设备报告的设备地址.
与手机的连接似乎正在工作并访问正确的服务,因为当我执行代码时,手机提示我询问我是否愿意接受来自我的电脑的消息服务器的连接.当语句’btClient.Connect(btEp);’被执行.
据我所知,我通过流读取并发送到手机的文本文件是由蓝牙MAP规范定义的正确格式化的bMessage,并在其他地方进行了验证.它的构造如下:
BEGIN:BMSG VERSION:1.0 STATUS:UNREAD TYPE:SMS_GSM FOLDER:TELECOM/MSG/OUTBox BEGIN:VCARD VERSION:2.1 N:(redacted) TEL:(redacted) END:VCARD BEGIN:BENV BEGIN:VCARD VERSION:2.1 N:(redacted) TEL:(redacted) END:VCARD BEGIN:BBODY ENCODING:G-7BIT LENGTH:47 BEGIN:MSG This is a short message END:MSG END:BBODY END:BENV END:BMSG
我用(编辑)替换了个人身份信息,但实际的文本文件包含正确的名称和数字.我在英国,所以SMS_GSM应该是正确的,据我所知.
任何帮助将不胜感激!
更新:我已经在目标电话上安装了一个蓝牙终端,并通过将相同的数据发送到设备上的虚拟端口,而不是消息访问服务器,验证该消息正在接收.不知道终端程序是否是一个问题,但是消息的最后一行被附加到前端并从最后错过.我修改了这个问题的文件末尾添加了一个换行符,但是当我将bMessage发送给MAS时,仍然没有任何的乐趣.
我也尝试了一些不同的流写作方法:
1)删除StreamWriter编码包装器 – 相同的结果
2)从循环中顺序发送每个字节 – 类似的结果,在手机上仍然没有动作.
如果有任何蓝牙通讯专家,我真的很感激一些建议!不一定必须是消息访问配置文件特定的,也不一定是C#.
我想我的下一步将是看看我是否可以找到一个现代汽车,它具有用于MAP服务的蓝牙配对,并且可以连接到手机,也可以在使用类似的功能时嗅探数据包?
03/02/16 – 在我的手机和新车之间嗅探数据包,同时在两个方向发送/接收消息,并将其与我的PC /代码和电话之间的嗅探数据包进行比较(谢谢Android!dev选项本机允许BT数据包记录,能够将其转储到Wireshark进行分析).我的代码正在使用BluetoothClient,它在BT协议栈中的RFCOMM上运行,而汽车则使用L2CAP. L2CAP在BT堆栈中低于RFCOMM,32Feet具有在此级别上运行的等效的L2CapClient.已经实现了这一点,但是它会抛出一个错误.事实证明,虽然支持L2CAP,但并不是所有使用它的配置文件都是MAP,而MAP似乎是其中之一.
我要回答这个问题,给任何绊倒的人提供可能的选择.
https://msdn.microsoft.com/en-us/library/windows/hardware/ff536674%28v=vs.85%29.aspx
19/02/16 – 我已经设法使用蓝牙链接到手机上的免提配置文件来发起呼叫(这是我想要做的,但我错误地认为短信会更容易!).我用AT命令来实现这一点.然后,我尝试使用AT命令发送短信,但显然我的手机在实施HFP时没有实现AT命令.所以还没有短信.
我的手机和汽车之间有几个通过蓝牙短信的数据包嗅探,所以会看看在某些时候如何处理.我确实需要得到短信排序,但可以在项目的当前阶段使用简单的语音呼叫启动运行.