2010-08-03 2 views
6

Кто-нибудь знает, как предоставить свой собственный LocationProvider и опубликовать его в системе, , чтобы другие приложения могли получить ссылку на него из LocationManager?Как предоставить свой собственный LocationProvider на Android?

+1

есть ли удовлетворяющий ответ на этот вопрос ??????? –

ответ

0

Читать учебник о Android location provider mock

+0

Я не намерен предоставлять mock-location-data для собственного приложения, но , чтобы иметь дополнительный LocationProvider для всех других приложений на телефоне на выбор. –

+0

Таким образом, руководство по поводу «определения местоположения провайдера Android» не помогает. –

1

Что предложил Pentium10, кажется, отсутствует, проверьте http://pedroassuncao.com/2009/11/android-location-provider-mock/

или LocationManagerProximitryTest на Google: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/location/LocationManagerProximityTest.java

Или вот другой аналогичный вопрос с рабочим раствором/кода : Android mock location on device?

1

Нельзя делать.

Проблема заключается в том, что только OEM-производителям разрешено устанавливать нового поставщика местоположения. Сторонний разработчик не может предоставить своему приложению разрешение, необходимое для установки нового поставщика местоположения (android.permission.INSTALL_LOCATION_PROVIDER).

Посмотреть ответ Дайан Hackborn (Android инженер рамки) в этой теме:

https://groups.google.com/d/topic/android-developers/OvCcdvO6jZY/discussion

Для установки нового поставщика местоположения, вы должны разработать совершенно новую прошивку (как http://www.cyanogenmod.com/), вставьте новый провайдера местоположения в этом прошивке и установите все это на телефоне пользователя.

Смотрите эту SO нить, а также: Why are these permissions being refused?

Все это из-за соображений безопасности.

+0

Возможно ли это на корневом устройстве? – JohnyTex

+1

@JohnyTex да возможно на корневом устройстве (или пользовательском роме). См. Инструкции на странице https://github.com/microg/android_packages_apps_UnifiedNlp –

6

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

Пример кода, посмотрите на воспроизведение GPX:
https://github.com/johncarpenter/Android-GPX-Mock-Location-Provider

Код для регистрации поставщика местоположения начинается в строке 203 файла android/src/com/twolinessoftware/android/PlaybackService.java.

Если вы хотите «реального» поставщика местоположения (например, для развертывания своей функциональности как части приложения конечного пользователя), некоторые источники утверждают, что это невозможно, если только этот поставщик не находится в пакете, подписанном с системным ключом, поэтому вам придется создавать свой собственный ПЗУ из источника, подписывать его с помощью своего ключа, подписывать своего провайдера местоположений с тем же ключом и устанавливать как на свой телефон.

Тем не менее, Android в какой-то момент представил «разобщенных» поставщиков местоположения. По-видимому, им было необходимо, чтобы переместить свой собственный NetworkLocationProvider из ядра Android в пакет Google Apps.

Я еще не видел, что в настоящее время существует нераспределенный провайдер местоположений, и я не знаю о его использовании с открытым исходным кодом, но похоже, что в последней версии Android есть поддержка поставщиков услуг «послепродажного обслуживания».

Исходный код для соответствующей библиотеки в
https://github.com/CyanogenMod/android_frameworks_base/tree/cm-10.1/location/lib

Поставщик место должен расширить com.android.location.provider.LocationProviderBase.

Классы и методы задокументированы в коде.

Редактировать: Глядя на
https://github.com/android/platform_frameworks_base/blob/master/core/res/AndroidManifest.xml
начиная с линии 607, он выглядит как уровень защиты для INSTALL_LOCATION_PROVIDER разрешения является signatureOrSystem. Это означает, что любое приложение, которое использует эту функцию (то есть устанавливает поставщика местоположения, не обязательно самого провайдера локализации), либо нужно будет подписаться с тем же ключом, что и платформа (для чего вам потребуется построить всю систему Android из источника) или быть установленным как системное приложение (которое может работать на корневых устройствах).

Существует некоторый код на
https://github.com/microg/NetworkLocation
, который, кажется, реализовать LocationProvider. Я еще не посмотрел на него (пока) или не построил его, поэтому я не могу сказать, работает ли он и что для него требуется. Но, возможно, это дает некоторые указатели.

+0

Если я создаю свой собственный LocationProvider, как мне его зарегистрироваться или установить? Я не могу найти ничего в манифесте ... – JohnyTex

+1

Я никогда не делал этого сам, но на сайте https://github.com/microg/android_packages_apps_UnifiedNlp есть пользовательский поставщик местоположения. Это приложение должно иметь весь код для установки правильного поставщика местоположения. Если вы хотите попробовать приложение, оно должно быть установлено как системное приложение (просто установите его и переместите в папку системного приложения через терминал или adb) и вам понадобится хотя бы один сервер, который может быть приложением для пользовательского пространства. – user149408

+0

Спасибо! Хотя эта библиотека, кажется, отсутствует: https://github.com/android/platform_frameworks_base/tree/master/location/lib Где я могу найти его? Мне действительно нужно проверить все репо? – JohnyTex

Смежные вопросы