Переопределение внутреннего GPS Android для использования с навигацией - PullRequest
1 голос
/ 26 января 2012

Если я хочу переопределить позицию GPS для получения из другого источника для всех приложений на устройстве (включая карты Google), например, для внешнего GPS-локатора, потребуется ли изменение исходного кода?

Я видел использование фиктивных местоположений, но, насколько я понимаю, эти фиктивные данные не передаются в Карты Google и поэтому не будут работать?

Изменение исходного кода или есть ли другой способ сделать это?

Было бы неплохо также указать точку в правильном направлении исходного кода, которую нужно было бы изменить!

1 Ответ

0 голосов
/ 26 января 2012

Вот как вы должны использовать пользовательский провайдер макетов:

    //Instantiate in your activity
    LocationManager lm = getSystemService(LOCATION_SERVICE);

    //Add a test provider
    lm.addTestProvider("myprovider", false, false, false, false, true, true, true, Criteria.POWER_HIGH, Criteria.ACCURACY_FINE);

    //Update the last location your provider will serve
    Location fakeLoc = ...;
    lm.setTestProviderLocation("myprovider", fakeLoc);

    //Using your custom location provider
    LocationProvider customProvider = lm.getProvider("myprovider");

Вы можете просмотреть документы по наиболее важным методам здесь .

Поскольку каждое приложение выбираеткакой провайдер использовать, вы не можете заставить их использовать свой.Кроме того, клиентские приложения должны иметь разрешение ACCESS_MOCK_LOCATION, что не может быть принудительно.

Но вы можете попытаться зарегистрировать фиктивного провайдера с именем провайдера gps по умолчанию:

    lm.addTestProvider(LocationManager.GPS_PROVIDER, false, false, false, false, true, true, true, Criteria.POWER_HIGH, Criteria.ACCURACY_FINE);

ОС должна помешать вам добиться успеха в этом (в противном случае это будет серьезным недостатком безопасности).

...