Мне нужно реализовать собственное приложение для iPhone, чтобы измерить скорость телефона (в основном спидометр). Я знаю, что вы можете сделать это через CoreLocation API довольно легко, но меня беспокоит потребление батареи, поскольку это должно быть измерение в реальном времени, которое может использоваться в течение нескольких часов за раз. Я понимаю, что, хотя вы активно отслеживаете события из LocationManager (хотя я действительно не забочусь о местоположении GPS), он интенсивно заряжается батареями.
Другим очевидным вариантом для изучения будет использование акселерометров, чтобы попытаться вычислить скорость, но в API нет ничего, что могло бы вам помочь. Основываясь на моих исследованиях, это должно быть возможно сделать, но кажется чрезвычайно сложным и подверженным ошибкам. Переход от ускорения к скорости может быть сложным для начала, плюс данные акселерометра iPhone могут быть "шумными". Я знаком с примером SDK, который демонстрирует использование фильтрации низких/высоких частот и т.д. - но я не видел ни одного хорошего примера, показывающего скорость вычисления.
Есть ли у кого-нибудь реальный опыт, с которым они могут поделиться? Код был бы фантастическим, но на самом деле я просто хочу знать, успешно ли это сделал (для долговременного приложения) и какой подход они взяли.
EDIT. У меня есть рабочий прототип, который использует API LocationManager. Он работает нормально, но цикл обновления далеко не идеален для измерения скорости в реальном времени. В зависимости от обстоятельств иногда может потребоваться до 4-5 секунд для обновления. Круиз на заданной скорости имеет тенденцию работать нормально, но ускорение/торможение имеют тенденцию сильно отставать от точки зрения пользователя. Кроме того, мне нужно передавать скорость в некоторые другие вычисления, которые я делаю, и точность не в том, что мне нужно.
Кажется возможным, исходя из (очень немногих) других приложений, которые я видел, особенно gMeter, который утверждает, что не использует GPS но точно вычисляет скорость. Я действительно удивлен, что нет ссылок или каких-либо примеров кода, демонстрирующих это где-нибудь, что я могу найти. Я понимаю, что он сложный, но, безусловно, там что-то есть.