Расположение Android Mock не работает с картами Google

Я создал приложение для Android, которое издевается над местоположением gps, прекрасно работает с большинством таких программ, как igo, waze, osmAnd, статус GPS и т. Д., Но не с картами Google, которые все еще показывают фактическое положение, в котором я включен.

Я также отключил gps и сетевое расположение.

Есть идеи, почему? как его решить? благодаря

Код, который я использую:

public void setLocation(double latitude, double longitude, double altitude, float bearing, float speed){
    String PROVIDER_NAME = LocationManager.GPS_PROVIDER;
    locationManager.addTestProvider(PROVIDER_NAME, false, false, false, false, true, true, true, Criteria.POWER_LOW, Criteria.ACCURACY_FINE);

    locationManager.setTestProviderEnabled(PROVIDER_NAME, true);
    locationManager.setTestProviderStatus(PROVIDER_NAME, LocationProvider.AVAILABLE, null, System.currentTimeMillis());

    Location location = new Location(PROVIDER_NAME);
    location.setLatitude(latitude);
    location.setLongitude(longitude);
    location.setAltitude(altitude);
    location.setBearing(bearing);
    location.setSpeed(speed);   
    location.setTime(System.currentTimeMillis());
    locationManager.setTestProviderLocation(PROVIDER_NAME, location.getLocation());
}
2
nl ja de
Чтобы использовать макет местоположения, вы должны указать в своем манифесте, что хотите работать с макетными точками, - это отдельное разрешение. Вы уверены, что на картах Google есть это разрешение? Возможно, он решил не использовать издевательства нарочно.
добавлено автор Gabe Sechan, источник
Я предполагаю, что действия/фрагменты Карты Google принимают меры, когда они выходят на передний план, чтобы не стать жертвой подмены местоположения. Mock LocationProviders вступают в силу в масштабах всей системы, что также означает, что другое приложение может удалить провайдера макетов, добавленного вашим приложением. Если вы вернетесь в Waze после просмотра Карт Google, Waze все еще будет получать ваши фальшивые обновления местоположения GPS?
добавлено автор Sean Barbeau, источник
Спасибо за помощь. Я предполагаю, что у них это есть, поскольку в других макетных программах, таких как «поддельное мое местоположение», его работы.
добавлено автор Arnold, источник

2 ответы

Вы должны использовать GoogleMap.setLocationSource (источник LocationSource) для предоставления случайных местоположений последнему SDK Google Maps на Android. Используйте случайный источник местоположения следующим образом:

// In your MapFragment implementation or similar
if (BuildConfig.DEBUG)
    map.setLocationSource(new MockLocationSource());

MockLocationSource.java:
public class MockLocationSource implements LocationSource {

    private static final float ACCURACY = 1;//Meters
    private static final int MAX_SPEED = 10;//m/s
    private static final LatLng CENTER = new LatLng(59.91127, 10.70834);
    private static final double DELTA_LAT = 0.0005;
    private static final double DELTA_LON = 0.0005;

    private static final long UPDATE_PERIOD = TimeUnit.SECONDS.toMillis(2);

    private final Handler handler = new Handler();
    private LatLng lastCoordinate = CENTER;
    private OnLocationChangedListener listener;

    private void scheduleNewFix() {
        handler.postDelayed(updateLocationRunnable, UPDATE_PERIOD);
    }

    private final Runnable updateLocationRunnable = new Runnable() {

        @Override
        public void run() {
            Location randomLocation = generateRandomLocation();
            listener.onLocationChanged(randomLocation);
            scheduleNewFix();
        }
    };

    public Location generateRandomLocation() {

        Location location = new Location(getClass().getSimpleName());
        location.setTime(System.currentTimeMillis());
        location.setAccuracy(ACCURACY);
        location.setBearing(randomizer.nextInt(360));
        location.setSpeed(randomizer.nextInt(MAX_SPEED));
        location.setLatitude(lastCoordinate.latitude + scaleOffset(DELTA_LAT));
        location.setLongitude(lastCoordinate.longitude + scaleOffset(DELTA_LON));

        lastCoordinate = new LatLng(location.getLatitude(), location.getLongitude());

        return location;
    }

    private final static Random randomizer = new Random();

    private double scaleOffset(double value) {
        return (randomizer.nextDouble() - 0.5) * value;
    }

    @Override
    public void activate(OnLocationChangedListener locationChangedListener) {
        listener = locationChangedListener;
        scheduleNewFix();
    }

    @Override
    public void deactivate() {
        handler.removeCallbacks(updateLocationRunnable);
    }

}
2
добавлено
На некоторых устройствах нет SDK Google Maps.
добавлено автор skoperst, источник

Спасибо за помощь. Я нашел проблему, кажется, что goggle требует установить Точность, когда приложения других не нуждаются в ней поэтому добавление строки location.setAccuracy (1); Это решило проблему.

1
добавлено
Спасибо, это сделало это для меня!
добавлено автор 3lectrologos, источник
Отметить как ответ?
добавлено автор JohnyTex, источник
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

Android Developers
Android Developers
4 476 участник(ов)

Общаемся на темы, посвященным Android-разработке, SDK, Kotlin, Realm и т.д.

Android Architecture
Android Architecture
2 186 участник(ов)

Русскоязычный чат по архитектуре в андроид приложениях. Подробнее: http://telegra.ph/Android-Architecture-12-24

rus-speaking/android
rus-speaking/android
1 705 участник(ов)

Основной чат по Android разработке (вопрос-ответ). ПРАВИЛА: bit.ly/andr-rules. NEWS: bit.ly/AnrdResId ЧАТЫ: Основной: bit.ly/andr-main IDE, сборка, Git, сервисы: bit.ly/andr-tools Оффтоп: bit.ly/andr-offtop Конференции, события: bit.ly/andr-events Вакансии, найм: bit.ly/andr-job Архитектура: bit.ly/andr-patterns Rx: bit.ly/andr-rx Тестирование: bit.ly/andr-test Kotlin: bit.ly/andr-kotlin Хаmarin: bit.ly/andr-xamarin За мат, спам, агрессию, предложения о работе, оффтоп в этом канале - бан на сутки и более ☢☢☢

Android Dev Подкаст
Android Dev Подкаст
1 325 участник(ов)

Комната для обсуждения Android Dev подкаста apptractor.ru/AndroidDev/ Общее обсуждение Android: https://t.me/android_ru Остальные чаты про Android: http://t.me/devChats Наши новости https://t.me/androiddevpodcast_news

Android Guards
Android Guards
602 участник(ов)

Обсуждение любых вопросов касающихся безопасности Android. - Защита системы и приложений - Уязвимости и эксплойты - Вредоносное ПО - Копание в кишках системы и приложений (RE)

Android JOB
Android JOB
466 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению Android (full-time, part-time, remote и разовые подработки)

AndroidDev :: Разработка. It's Android time now!
AndroidDev :: Разработка. It's Android time now!
458 участник(ов)

It's Android time now! Чат разработчиков Android. Вакансии, резюме и информацию о митапах размещать можно. Публикацию скрытой и явной рекламы ваших каналов и сайтов после получения разрешения от @olegushakov

Aandroid Talks!
Aandroid Talks!
212 участник(ов)

Чат об общих вопросах по ОС Android. Чат для разработки под андроид - pro.android: https://t.me/joinchat/AAAAAEKIFKnmRT9cMebb9w

Android Rus
Android Rus
68 участник(ов)