Я пытаюсь отправить bMessage из кода С# на ПК с Win7 на телефон Samsung Note 2. У меня есть 32-футовая библиотека Bluetooth, и я использую Visual Studio 2013 Community Edition.
Вот код, который у меня сейчас есть:
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 — это конечная точка Bluetooth, переданная функции для отправки сообщения и определенная в другом месте следующим образом:
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);' выполняется.
Насколько мне известно, текстовый файл, который я читаю и отправляю на телефон через поток, представляет собой правильно отформатированное bMessage, как определено спецификацией Bluetooth 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
Я заменил личную информацию на (отредактировано), но фактический текстовый файл содержит собственные имена и номера. Я живу в Великобритании, поэтому, насколько я знаю, SMS_GSM должен быть правильным.
Будем очень благодарны любой помощи!
Обновление: я установил терминал Bluetooth на целевом телефоне и убедился, что сообщение получено, отправив те же данные на виртуальный порт на устройстве, а не на сервер доступа к сообщениям. Не уверен, что это была проблема с терминальной программой, но последняя строка сообщения добавлялась к началу и пропускалась с конца. Я добавил разрыв строки в конец файла, что устранило эту проблему, но по-прежнему не радует, когда я отправляю bMessage в MAS.
Я также пробовал несколько различных подходов к написанию потоков:
1) удаление оболочки StreamWriter Encoding - тот же результат 2) последовательная отправка каждого байта из цикла - аналогичный результат, по-прежнему никаких действий на телефоне.
Если есть специалисты по Bluetooth, буду очень признателен за совет! Не обязательно должен быть привязан к профилю доступа к сообщениям или, обязательно, к C#.
Я предполагаю, что моим следующим шагом будет посмотреть, смогу ли я найти современный автомобиль, который имеет Bluetooth-сопряжение для сервисов MAP и может подключаться к телефону и, возможно, перехватывать пакеты при использовании аналогичных функций ???
02.03.16 - Я перехватил пакеты между моим телефоном и новой машиной, отправляя/получая сообщения в обоих направлениях, и сравнил это с перехваченными пакетами между моим ПК/кодом и телефоном (спасибо Android! Параметры разработчика изначально позволяют вести журнал пакетов BT и были смог сбросить это в Wireshark для анализа). Мой код использует BluetoothClient, который работает через RFCOMM в стеке протоколов BT, тогда как автомобиль использует L2CAP. L2CAP — это уровень ниже RFCOMM в стеке BT, и 32Feet имеет эквивалентный клиент L2CapClient для работы на этом уровне. Реализовал это, но выдает ошибку. Оказывается, хотя L2CAP поддерживается не всеми профилями, которые его используют, и MAP, похоже, является одним из них.
Я собираюсь ответить на этот вопрос, чтобы дать возможные варианты всем, кто наткнется на него.