Когда я писал про location-based services, я всячески подчеркивал, что предоставление подобных услуг опирается на инфраструктуру, созданную компанией-оператором.
Оно и понятно - только оператор имеет полный и удобный доступ к служебной информации, на основании которой можно точно или приближенно вычислять положение телефона. Впрочем, если уж нельзя получить доступ полный и удобный, но очень хочется - может, можно обойтись неполным и неудобным?
Ведь сам телефон в любой момент знает, какой LAC и CellID у текущей camped cell (в которой он ожидает входящего звонка или через которую будет делать исходящий). В этом нетрудно убедиться, если ваш телефон поддерживает “инженерный режим” (называемый Net Monitor у Нокии, TechMode у Sony-Ericsson и т.п.).
Сами телефоны сегодня поддерживают пользовательские приложения. Делов-то - бери и используй информацию о текущей соте в своем приложении, как душе угодно.
Но тут и порылась пресловутая собака. Дело в том, что стандартного API для доступа к этой информации из приложений - нет. Народные умельцы, конечно, раскопали какие-то возможности для отдельных платформ (для Symbian, для Motorola, для Win CE и Blackberry), но для самого распространенного на сегодня варианта телефонов-с-приложениями (java, aka J2ME, aka. MIDP 2.0) такой стандартной возможности нет :(
Впрочем, это не помешало народным умельцам (а наряду с ними - и достаточно крупным корпорациям) создать поверх этих хаков достаточно интересные приложения.
В качестве примера рассмотри два подобных приложения: Flexi-Spy и
Авторы Flexi-Spy предлагают пользователям установить программу на телефон согласного на всё (или ничего не подозревающего) субъекта и использовать ее для слежения за разнообразными аспектами “телефонной жизни” наблюдаемого. В частности - за его местоположением. Впрочем, авторы честно признаются, что на выходе следящий получает “голые” LAC и CellID, и заниматься их привязкой к местности ему придется самостоятельно: “Вам следует посетить места, где, как вы подозреваете, был наблюдаемый объект (или где он находился по его версии, или где он должен был находится), и определить номер соты в данном районе. Затем вам остается сравнить этот номер с номером соты, в которой объект действительно находился согласно собранным данным”. (Кстати, существование этой программы, перечень ее функций и перечень поддерживаемых моделей телефонов - одно из ярких свидетельств того, что разнообразные
Google же пошел на шаг дальше, и привязал “наблюдаемые” значения LAC и CellID определенного количества мобильных операторов к реальным географическим координатам, что позволяет им показывать текущее положение абонента на карте с точностью от 5 км до 100 м. Я подозреваю, что для сбора этих данных использовались бета-тестеры (или все пользователи) приложения Google Mobile Maps, обладающие телефонами, которые не только предоставляют информацию о LAC/CellID, но и имеют встроенный или подключенный по bluetooth GPS-приемник. По крайней мере, такая версия не только объясняет широту покрытия этой услуги в восточной Европе и в США, но и отвратительно качество ее работы в наших краях :)
Кстати, сравните список аппаратов, поддерживаемых Google Mobile Maps и список аппаратов, поддерживаемых Flexi-Spy - похоже, что используются одни и те хе хаки/недокументированные API.
Вобщем, видно, что “если нельзя, но очень хочется - то можно”, причем - с достаточно неплохим качеством. Однако, хочу подчеркнуть, что информация о LAC и CellID - это исключение, которое только подчеркивает общее правило: большинство низкоуровневой служебной информации телефона недоступно из пользовательских приложений, и уж во всяком случае речь не идет о наличии какого-то универсального общедоступного API.