CMMotionActivityManager игнорирует цикличность

Я изучал новую микросхему M7 CMMotionActivityManager, чтобы определить, идет ли пользователь устройства в рабочем состоянии, в автомобиле и т.д. (см. Документация Apple). Это показалось отличным шагом вперед по сравнению с попыткой определить это ранее, используя только данные LocationManager и акселерометра.

Однако я заметил, что CMMotionActivityManager не имеет циклической активности, что является разочаровывающим и почти разрывом для полного использования в качестве нового менеджера активности. Кто-нибудь еще нашел удобный способ использовать CMMotionActivityManager с циклом также без необходимости повторного включения акселерометра CMLocationManager + только для того, чтобы попробовать также проверить цикл?

Примечание. Это также не включает общие параметры транспорта для таких вещей, как поезд. Например, я еду на поезде час в день. Автомобиль можно было бы сделать более общим, по крайней мере, подобно тому, как Moves использует Transport.

CMMotionActivity имеет только указанные типы движения:

  • стационарные
  • ходьба
  • работает
  • автомобильная
  • неизвестен

Полезные примечания от кода Apple, которые не обязательно решают проблему, но полезны:

CMMotionActivity

Оценка активности пользователя на основе движения устройства.

Активность отображается как набор свойств, свойства не являются взаимоисключающим.

Например, если вы находитесь в машине, остановленной при знаке остановки, состояние может выглядит как:     стационарный = ДА, ходьба = НЕТ, работа = НЕТ, автомобильная = ДА

Или движущееся транспортное средство, неподвижное = НЕТ, ходьба = НЕТ, работа = НЕТ, автомобильная = ДА

Или устройство может быть в движении, но не ходить или в автомобиле.      стационарный = НЕТ, ходьба = НЕТ, работа = НЕТ, автомобильная = НЕТ. Обратите внимание, что в этом случае все свойства НЕТ.

[Прямой источник: Apple iOS Framework, CoreMotion/CMMotionActivity.h @interface CMMotionActivity, встроенные комментарии к коду]

Ответ 1

Итак, не уверен, что вам все еще нужен ответ на этот вопрос, но вот последний из iOS8 SDK

@property(readonly, nonatomic) BOOL cycling NS_AVAILABLE(NA, 8_0);

Ответ 2

Прежде всего, это ваш вопрос или вид информационных деталей на M7?

Кто-нибудь еще нашел удобный способ использования CMMotionActivityManager с велоспортом также без необходимости повторного включения LocationManager + акселерометр просто для того, чтобы испытать на велосипеде тоже?

Посмотрите, есть много путаницы, которые он создаст, если вы хотите проверить, является ли активность типом циклирования, потому что ее просто зависит от акселерометра

акселерометр содержит микроскопические структуры кристаллов, которые усиливаются ускоряющими силами, что вызывает напряжение. И от этого напряжения он может анализировать результат. Так что я знаю, что он просто классифицирует вашу скорость и дает вам результат, бег пешком или автомобильной, поэтому, если вы хотите использовать велосипед в течение некоторого времени очень быстро, очень медленно или средним, возможно, это приведет к некоторому времени на прогулку или бег или может быть auotomotive, поэтому m7 не может прояснить ситуацию, если ее автомобильная или велосипедная или беговая дорожка потому что во время езды на велосипеде не так много вариации скорости.

При использовании во время работы и ходьбы его некоторое время дает неправильные результаты в некоторых случаях. Таким образом, вероятность того, что ваше приложение также сообщит неверную информацию.

Еще одна вещь, которую вы задали, -

Примечание. Это также не включает общие транспортные параметры для вещей как Поезд. Например, я еду на поезде час в день. Автомобиль можно было бы сделать более общим по крайней мере, подобно тому, как Moves использует транспорт.

Итак, Apple также работает над другими функциями отображения. Предполагается, что Apple планирует планировать заметные обновления своего приложения Maps в iOS 8, и в настоящее время компания работает над реализацией как маршрутов общественного транспорта, так и функций внутреннего картографирования (которые Google уже имеет в iOS).

http://www.macrumors.com/2013/09/12/apple-working-to-leverage-new-m7-motion-sensing-chip-for-mapping-improvements/ (Полезная ссылка)

Ответ 3

В сеанс 612 на WWDC 2014 два представляющих инженера Apple предоставили некоторую информацию: В слайдах они заявили:

Производительность очень чувствительна к местоположению

  • Лучше всего работает, если устройство надевается на плечо Лучшее для ретроспективных вариантов использования.

Самая длинная задержка

  • Лучший вариант для ретроспективных вариантов использования

В видео они объясняют на звуковой дорожке (начиная примерно с 11:00), что

Велоспорт - это новое, что мы ввели в iOS 8. Велоспорт очень сложный, и вам снова нужна динамика, и поэтому это будет очень чувствительно к местоположению. Если он был установлен на плече, латентность будет довольно разумный. И если это где-нибудь еще, это займет намного больше времени. Поэтому определенно я бы не предложил использовать классификацию циклической активности как подсказку для контекста здесь и сейчас. Это действительно то, что вы хотите использовать ретроспективно для приложения для ведения журналов, например.

Я сделал простую тестовую настройку для iOS 8 и 9 и iPhone 5 и 6, а цикличность не была обнаружена - не один раз в течение более чем 1,5 часа езды на велосипеде. Если новый iPhone 6S справится с этим основным дефицитом в обнаружении активности движения, неясно - Фил Шиллер объявил об этом в сентябре 2015 года.

TL; тр

В настоящее время обнаружение на велосипеде в CoreMotion не работает, поскольку оно работает для стационарных, ходячих, бегущих и автомобилей! Он не будет обнаружен и может использоваться только ретроспективно.