MS Band продолжает считывать значения на экране блокировки

Я пытаюсь прочитать значения акселерометра из диапазона, даже если

  • Телефон заблокирован
  • Приложение не имеет фокуса

Чтение значений, когда приложение имеет фокус, работает достаточно хорошо. Но если я нажму кнопку «Windows» и буду работать с другими приложениями, ChangedEventArgs больше не будет запущен.

Я хотел бы собирать данные акселерометра и гироскопа в течение всего дня, чтобы определить, что делает пользователь, который носит браслет. (Распознавание образов еды, питья и т. д.)

Возможно ли это с Microsoft.Band SDK по умолчанию?

Мой код

            IBandInfo[] pairedBands = await BandClientManager.Instance.GetBandsAsync();
            IBandClient bandClient = await BandClientManager.Instance.ConnectAsync(pairedBands[0]);
            if (bandClient.SensorManager.HeartRate.GetCurrentUserConsent() != UserConsent.Granted)
            {
                await bandClient.SensorManager.Gyroscope.RequestUserConsentAsync();
            }

            bandClient.SensorManager.Gyroscope.ReadingChanged += Gyroscope_ReadingChanged;
            await bandClient.SensorManager.Gyroscope.StartReadingsAsync();

person Thomas Christof    schedule 25.04.2016    source источник


Ответы (2)


Вместо использования фоновой задачи TimeTrigger вы можете изучить DeviceUseTrigger, чтобы получить «почти постоянное» подключение к группе. Хотя я сам не пробовал, ниже в статье подробно описаны необходимые шаги. Я думаю, что это выполнимый подход, учитывая ваши требования?

http://www.codeproject.com/Tips/1036512/Achieveing-Indefinite-Background-Execution-with-th

person Jens    schedule 27.04.2016
comment
Отличная статья. Спасибо! - person Thomas Christof; 27.04.2016

Приложение должно работать непрерывно, чтобы непрерывно передавать данные датчика с Band. В Windows Phone это обычно означает, что приложение находится на переднем плане и активно используется; приложения могут передавать данные датчиков в фоновом режиме, но из соображений экономии заряда батареи фоновые задачи имеют строгие ограничения на частоту и продолжительность их выполнения. Очень немногие приложения могут работать непрерывно (например, приложения потокового мультимедиа).

В любом случае, наличие активного соединения Bluetooth с браслетом в течение длительного периода времени, вероятно, приведет к значительному расходу заряда батареи браслета. Ради ваших пользователей вы, вероятно, захотите определить другие триггеры, которые указывают, когда пользователь может участвовать в определенной деятельности, а затем передавать данные датчиков только в течение этих коротких периодов времени.

person Phil Hoff -- MSFT    schedule 26.04.2016
comment
Собственно, это именно то, что я хотел сделать. Жаль, что Windows Phone всегда ограничивает программистов. Я не могу использовать фоновую задачу, так как минимальная разница во времени между триггерами составляет не менее 15 минут. И если срабатывает фоновая задача, я получаю только слайд с ограниченным временем. Проект предназначался только для научных исследований. Быстро разряжающиеся батареи были бы в порядке, если бы я мог отслеживать и анализировать данные :) - person Thomas Christof; 26.04.2016
comment
Вместо этого вы можете попробовать использовать Band с платформой Android, так как он, как правило, имеет более расслабленный взгляд на выполнение фоновых задач. (Вы по-прежнему можете использовать .NET и C# на Android с помощью платформы и инструментов Xamarin.) - person Phil Hoff -- MSFT; 26.04.2016
comment
Это проблема, с которой приходится сталкиваться MS. Одна из нескольких причин, почему так мало людей хотят разрабатывать для WP. Это слишком закрытая система с почти нулевой свободой развития. Это уже третье приложение, от которого я вынужден отказаться из-за строгой экономии WP. Но спасибо за ваш ответ. - person Thomas Christof; 26.04.2016