Проверьте, подключено ли устройство Microsoft Band

Я работаю с Microsoft Band SDK как для iOS, так и для Windows Phone. Я заметил, что на iOS я могу проверить, подключено ли носимое устройство к смартфону:

MSBClient* bandClient = [[[MSBClientManager sharedManager]attachedClients]firstObject];

if(bandClient.isDeviceConnected){
   //...
}

Есть ли способ добиться того же результата на Windows Phone? Я получаю bandClient на Windows Phone таким образом:

IBandInfo[] pairedBands = await BandClientManager.Instance.GetBandsAsync();
using (IBandClient bandClient = await BandClientManager.Instance.ConnectAsync(pairedBands[0]))
{
    //stuff...
}

Но как после подключения понять, подключен ли браслет в определенный момент к (или отключен) от телефона? В Windows Phone sdk нет обратного вызова onClientDisconnected() и нет такой функции, как bandClient.isDeviceConnected().

Есть ли способ проверить, подключен ли браслет к смартфону? Это действительно важно: после подключения, например, я мог взять браслет и уйти далеко от смартфона, теряя связь.


person matteopuc    schedule 29.07.2015    source источник


Ответы (2)


В Windows нет необходимости в методе «подключено», так как вызов IBandClientManager.ConnectAsync() пытается установить Bluetooth-соединение с Band (разрывается только при удалении возвращенного IBandClient). Если соединение не может быть установлено, метод выдаст исключение.

person Phil Hoff -- MSFT    schedule 31.07.2015
comment
Да, но как понять, если браслет в какой-то момент отключился от смартфона? SDK для Windows Phone не имеет обратного вызова, такого как onClientDisconnected, и, как я уже говорил выше, нет свойства (или метода) client.isDeviceConnected. Если я устанавливаю связь, а потом беру браслет и ухожу далеко от телефона, связь пропадает. И я не знаю, как это понять. Должен ли я выполнять опрос соединения, вызывая ConnectAsync() каждые, например, 10 секунд? Это кажется действительно некрасивым. Спасибо за помощь мне! - person matteopuc; 31.07.2015
comment
Пакет SDK для Windows Phone Band не поддерживает обратный вызов или событие при отключении. Если вы вызовете метод для IBandClient, который не увенчается успехом (например, из-за того, что полоса вышла за пределы допустимого диапазона), тогда метод выдаст исключение. Band SDK ограничен API базовой платформы Bluetooth, которые не всегда позволяют ему определить, когда устройство Bluetooth больше не может быть (или временно недоступно). Ваше приложение должно быть устойчивым к временным сбоям подключения. В то же время ваше приложение должно минимизировать время при открытом соединении с Band. - person Phil Hoff -- MSFT; 01.08.2015
comment
Я подозревал, что проблема такого рода. Это немного разочаровывает по сравнению с двумя другими платформами (iOS и Android). К сожалению, мое приложение должно быть постоянно связано с группой. Единственное, что я могу сделать, как вы мне предлагаете, это обнаруживать исключения, выдаваемые системой, и временно прекращать взаимодействие между моим приложением и группой. Затем каждые n секунд я мог бы пытаться повторно подключиться к носимому устройству. Итак, ответ на мой вопрос - ваш второй комментарий здесь выше. Если вы скопируете и вставите в поле ответа, я приму это. Опять же, спасибо. - person matteopuc; 01.08.2015

Вы можете подписаться на один из датчиков, и если у вас нет значения в течение периода времени, превышающего период обновления датчика, он отключается. Например. если вы подписываетесь на частоту сердечных сокращений, вы должны получать значение каждую секунду. Если он не получен более секунды, то он отключается. Что касается батареи, я бы использовал что-то с более длинным интервалом, например. температура - 30 секунд. Вы упомянули, что вам нужна постоянная связь. Так что, возможно, вам все равно нужны какие-то датчики.

person rastik    schedule 30.08.2015