使用C#中的32feet.net库从Windows发送bMessage到消息访问服务器

fra*_*gle 12 c# bluetooth 32feet

我正在尝试从Win7 PC上的C#代码发送bMessage到Samsung Note 2手机.我有32英尺蓝牙库,我正在使用Visual Studio 2013社区版.

这是我目前的代码:

    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);
    }
Run Code Online (Sandbox Code Playgroud)

btEp是传递给函数的蓝牙端点,用于发送消息并在其他地方定义如下:

BluetoothEndPoint BtEp;
Run Code Online (Sandbox Code Playgroud)

这是使用变量构建的:

BtEp = new BluetoothEndPoint(device.DeviceInfo, mapServiceId);
Run Code Online (Sandbox Code Playgroud)

这两个值都是在运行时从设备获取的,并在执行期间采用以下值:

-       mapServiceId    {00001132-0000-1000-8000-00805f9b34fb}  System.Guid
+       BtEp    {BC20A4164A8C:0000113200001000800000805f9b34fb} InTheHand.Net.BluetoothEndPoint
Run Code Online (Sandbox Code Playgroud)

BC20A4164A8C是设备报告的设备地址.

与手机的连接似乎正在工作并访问正确的服务,因为当我执行代码时,手机会提示我询问是否愿意接受从我的PC连接到消息服务器的连接.当语句'btClient.Connect(btEp);'时会发生这种情况.被执行.

据我所知,我通过流读取并发送到手机的文本文件是正确格式化的bMessage,由蓝牙MAP规范定义并在其他地方验证.它的构造如下:

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
Run Code Online (Sandbox Code Playgroud)

我用(编辑)替换了个人身份信息,但实际的文本文件包含正确的名称和数字.我的总部设在英国,所以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似乎就是其中之一.

我将回答这个问题,为偶然发现它的任何人提供可能的选择.

fra*_*gle 2

我想我已经确定使用 32Feet/C# 执行此操作是不可行的。如果您想要访问手机的蓝牙消息访问服务器/配置文件/客户端 (MAS MAP MAC),则无法使用 32Feet.Net 库中的高级函数来实现此目的。相反,您需要使用 C++ 中的较低级别代码,如 MSDN 上详述:

https://msdn.microsoft.com/en-us/library/windows/hardware/ff536674%28v=vs.85%29.aspx

2016 年 2 月 19 日 - 我已成功使用手机上的免提配置文件的蓝牙链接来发起呼叫(这是我想做的其他事情,但我错误地认为短信会更容易!)。我已经使用AT命令来实现这一点。然后我也尝试使用 AT 命令发送短信,但显然我的手机在 HFP 的实现中没有为此实现 AT 命令。所以还是没有短信。

我在手机和汽车之间通过蓝牙嗅探了一些短信数据包,因此我会在某个时候看看如何处理。我确实需要对短信进行排序,但可以在项目的当前阶段通过简单的语音呼叫启动来运行。