Как имитировать местоположение на устройстве?

Как я могу имитировать свое местоположение на физическом устройстве (Nexus One)?

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


person Isaac Waller    schedule 27.03.2010    source источник
comment
Для настольных компьютеров вы можете создать / установить драйверы, имитирующие устройство GPS / устройство с последовательным портом, с целью проведения такого рода тестирования. Возможно, вам удастся создать или найти что-то подобное для android.   -  person AaronLS    schedule 01.04.2010
comment
В Маркете есть несколько приложений, которые могут имитировать местоположение по GPS. Например, спуфер местоположения.   -  person Vlad    schedule 03.12.2010
comment
В магазине есть много приложений, которые делают это .. Вы можете попробовать следующее - play.google.com/store/apps/ или это - play.google.com/store/apps/   -  person Yehuda    schedule 07.08.2015
comment
В магазине также есть приложение, которое поддерживает команды geo fix и geo nmea, как и эмулятор! play.google.com/store/apps/   -  person luv    schedule 30.07.2016


Ответы (21)


Кажется, единственный способ сделать это - использовать имитацию провайдера местоположения.

Вы должны включить фиктивные местоположения в панели разработки в своих настройках и добавить

   <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> 

в ваш манифест.

Теперь вы можете войти в свой код и создать своего собственного провайдера фиктивного местоположения и установить местоположение этого провайдера.

person Janusz    schedule 01.04.2010
comment
В маркете есть приложение под названием Fake GPS. Если вы включите фиктивные местоположения на своем устройстве, он предлагает красивый графический интерфейс для настройки вашего местоположения. Я понимаю, что это не самостоятельное решение, но, безусловно, достойное решение для быстрого тестирования. - person Tim Green; 31.08.2011
comment
это может быть ссылкой с той же датой и соответствующим содержанием. - person DefenestrationDay; 19.04.2012
comment
На самом деле поддельное приложение GPS не самое лучшее, потому что оно может только задавать местоположения и случайным образом перемещаться. Их новая версия может прокладывать маршруты, но она только перебирает точки пути, так что огромные прыжки в локации. Ответ Януша действительно правильный, что вам нужно создать своего собственного провайдер-макета. Мы недавно это сделали, и если кому-то это понадобится или если этот вопрос все еще нуждается в помощи, я отправлю код. - person vkinra; 11.06.2013
comment
Утверждение "войдите в ваш код и создайте своего собственного провайдера фиктивного местоположения" должно быть объяснено более подробно. - person Dims; 16.02.2017
comment
Теперь появляется Studio Android 2.3.2 msg: Mock location следует запрашивать только в файле манифеста для тестирования или отладки (обычно src / debug / AndroidManifest.xml) - ›Кто угодно, как создать его в режиме выпуска? - person Huỳnh Ngọc Bang; 08.06.2017

Если вы используете этот телефон только в лаборатории разработки, есть вероятность, что вы сможете припаять чип GPS и напрямую подключить к последовательному порту последовательности NMEA с другого устройства.

person tomash    schedule 29.03.2010
comment
Если у вас возникли проблемы с пониманием того, как сгенерировать реалистичные последовательности NMEA в ваше распаянное устройство, есть отличный вариант: припаять туда реальное внешнее устройство GPS и переместить всю лабораторию разработки на реальный путь вместе с командой бегунов / байкеров / автомобили / самолеты / что угодно в зависимости от скорости, которую вы хотите моделировать. Не забудьте проделать отверстие в крыше лаборатории разработки, чтобы устройство могло принимать радиосигналы со спутников. Пожалуйста. ;-) - person Stéphane Gourichon; 08.06.2016
comment
@ StéphaneGourichon еще лучше, спаяйте их все вместе в один нечестивый металлический шар и используйте его в качестве антенны для GPS вашего телефона. Он обязательно принимает некоторые сигналы GPS. - person nurettin; 19.06.2016
comment
Жаль, что это часто та же ИС, что и GSM / HSPA / EDGE / LTE / CDMA. Повод ненавидеть дизайн SOC;) - person ewanm89; 14.07.2016
comment
Если вы не можете распаять чип, вы всегда можете собрать себе эскадрилью дронов, оснащенную радиостанциями, настроенными на ту же частоту, что и спутники GPS, излучающими с большой мощностью, чтобы заглушить реальные сигналы, а затем тривиально рассчитать временной сдвиг до подделка в зависимости от желаемого высмеянного местоположения. Имейте в виду, что каждый дрон должен излучать те же 3 канала, что и ваши ближайшие спутники, и что эти каналы меняются в зависимости от вашего местоположения. Также имейте в виду, что в вашем районе могут действовать ограничения воздушного пространства. - person rupps; 21.07.2016

Хотел бы я иметь под рукой свой кабель. Я знаю, что вы можете подключиться к эмулятору через telnet, чтобы изменить его местоположение

$ telnet localhost 5554
Android Console: type 'help' for a list of commands
OK
geo fix -82.411629 28.054553
OK

Я не могу вспомнить, можете ли вы подключиться к своему устройству через Telnet, но я думаю, что можете. Надеюсь, это поможет.

Для этого (CLI) вам понадобится adb (мост отладки Android).

person Tim Green    schedule 06.04.2010
comment
вы получаете отказ в разрешении на все, что вы отправляете в виде команды на консоль вашего устройства. Возможно, это возможно с помощью терминального приложения, но я думаю, что для этого требуется root-доступ - person Janusz; 06.04.2010
comment
Просто так мы на одной странице: вы ведь не про adb shell, не так ли? Я говорю о другом, это то, что позволяет вам устанавливать параметры, специфичные для Android. Я знаю, например, что вы можете настроить переадресацию портов (т.е. localhost: 1234 идет на телефон: 1234) без корневого доступа, поэтому вы можете настроить прокси-сервер SOCKS и туннель через кабель без root. - person Tim Green; 06.04.2010
comment
Вы можете использовать adb forward tcp: 6000 tcp: 23 для пересылки порта 6000 на вашем компьютере на порт 23 на устройстве, но мне не удалось подключиться, даже если порт отображается как открытый. Использование telnet-клиента на устройстве и подключение к localhost также не удается - person Janusz; 06.04.2010
comment
Искал способ вызвать это географическое исправление из командной строки, adb emu не работает, вам повезло больше? - person kirhgoff; 21.03.2012
comment
Это отлично работает для эмулятора, но не работает для реального устройства. Так что он вообще не отвечает на вопрос OP :( - person Matthew Gilliard; 28.11.2013
comment
@TimGreen Ваше решение только для эмулятора. Вопрос был о реальном устройстве. - person IgorGanapolsky; 23.01.2015
comment
если это действительно относится к эмулятору, то этот ответ не имеет значения, потому что вопрос заключался в том, как это сделать на физическом устройстве. - person axd; 12.12.2016
comment
Вы можете использовать приложение MockGeoFix, чтобы включить имитацию через telnet на реальном устройстве. У меня работает очень хорошо. play.google.com/store/apps/details?id= github.luv.mockgeofix - person Gert Hengeveld; 11.01.2017

Вы можете использовать разрешение служб геолокации, чтобы имитировать местоположение ...

"android.permission.ACCESS_MOCK_LOCATION"

а затем в вашем java-коде

// Set location by setting the latitude, longitude and may be the altitude...
String[] MockLoc = str.split(",");
Location location = new Location(mocLocationProvider);            
Double lat = Double.valueOf(MockLoc[0]);
location.setLatitude(lat);
Double longi = Double.valueOf(MockLoc[1]);
location.setLongitude(longi);
Double alti = Double.valueOf(MockLoc[2]);
location.setAltitude(alti);
person Vishwanath    schedule 06.04.2010
comment
в чем ценность mocLocationProvider? - person Victor; 10.10.2015
comment
например LocationManager.GPS_PROVIDER - person enigma969; 12.11.2016

Я добился успеха со следующим кодом. Хотя по какой-то причине у меня была одна блокировка (даже если я пробовал разные пары LatLng), у меня это сработало. mLocationManager - это LocationManager, который подключен к LocationListener:

private void getMockLocation()
{
    mLocationManager.removeTestProvider(LocationManager.GPS_PROVIDER);
    mLocationManager.addTestProvider
    (
      LocationManager.GPS_PROVIDER,
      "requiresNetwork" == "",
      "requiresSatellite" == "",
      "requiresCell" == "",
      "hasMonetaryCost" == "",
      "supportsAltitude" == "",
      "supportsSpeed" == "",
      "supportsBearing" == "",

      android.location.Criteria.POWER_LOW,
      android.location.Criteria.ACCURACY_FINE
    );      

    Location newLocation = new Location(LocationManager.GPS_PROVIDER);

    newLocation.setLatitude (/* TODO: Set Some Lat */);
    newLocation.setLongitude(/* TODO: Set Some Lng */);

    newLocation.setAccuracy(500);

    mLocationManager.setTestProviderEnabled
    (
      LocationManager.GPS_PROVIDER, 
      true
    );

    mLocationManager.setTestProviderStatus
    (
       LocationManager.GPS_PROVIDER,
       LocationProvider.AVAILABLE,
       null,
       System.currentTimeMillis()
    );      

    mLocationManager.setTestProviderLocation
    (
      LocationManager.GPS_PROVIDER, 
      newLocation
    );      
}
person Dr1Ku    schedule 18.01.2011
comment
Насколько я помню, setTestProviderStatus используется здесь для уведомления / публикации / планирования события с помощью LocationManager о том, что поставщик GPS нашел исправление, чтобы можно было обработать указанное событие. - person Dr1Ku; 11.04.2015
comment
Что означает mLocationManager - это LocationManager, подключенный к LocationListener? как я могу это сделать? Спасибо.. - person Yehuda; 25.07.2015
comment
Вот одна статья, объясняющая, как проверить изменение местоположения с помощью службы LocationManager и LocationListener: blog.doityourselfandroid.com/2010/12/25/ - person Dr1Ku; 28.07.2015
comment
плюс 1 за то, как вы представили истину (и) и ложь (и) в методе addTestProvider - person A.Alqadomi; 19.12.2016

То, что опубликовал Dr1Ku, работает. Использовал код сегодня, но нужно было добавить больше мест. Итак, вот некоторые улучшения:

Необязательно: вместо использования строки LocationManager.GPS_PROVIDER вы можете определить свою собственную константу PROVIDER_NAME и использовать ее. При регистрации для получения обновлений местоположения выберите поставщика по критериям вместо того, чтобы напрямую указывать его в виде строки.

Во-первых: вместо вызова removeTestProvider сначала проверьте, есть ли поставщик, который нужно удалить (чтобы избежать исключения IllegalArgumentException):

if (mLocationManager.getProvider(PROVIDER_NAME) != null) {
  mLocationManager.removeTestProvider(PROVIDER_NAME);
}

Во-вторых: чтобы опубликовать более одного местоположения, вы должны установить время для местоположения:

newLocation.setTime(System.currentTimeMillis());
...
mLocationManager.setTestProviderLocation(PROVIDER_NAME, newLocation);

Также, похоже, есть тест Google, который использует MockLocationProviders: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/location/LocationManagerProximityTest.java

Еще один хороший рабочий пример можно найти по адресу: http://pedroassuncao.com/blog/2009/11/12/android-location-provider-mock/

Еще одна хорошая статья: http://ballardhack.wordpress.com/2010/09/23/location-gps-and-automated-testing-on-android/#comment-1358 Вы также найдете код, который действительно работает для мне на эмуляторе.

person icyerasor    schedule 26.01.2011
comment
Классное предложение по определению вашего собственного провайдера, вещь с использованием GPS_PROVIDER заключается в том, что вы (по-видимому) не можете избавиться от фиктивного провайдера (точнее, вы не можете переключиться на нормальный GPS) до перезагрузки. Отличный пост, я проверю ссылки! - person Dr1Ku; 26.01.2011
comment
@ Dr1KU Все еще так не получается вернуться к нормальному GPS? Это где-то указано? - person Kaz Dragon; 21.11.2013
comment
@KazDragon Так было тогда. Насколько я помню, после включения Mock Provider нормальный GPS не работал, я не мог получить исправление (я тестировал прямо на устройстве). Это может быть не так, поскольку с тех пор в Android многое произошло. - person Dr1Ku; 22.11.2013
comment
@ Dr1Ku А, ну, сейчас я делаю что-то очень похожее и получаю результаты, аналогичные тем, которые вы описали. Я надеялся узнать, было ли это ограничение, встроенное в платформу, или я просто где-то пропустил вызов функции. Наверное, мне стоит сделать из этого вопрос. - person Kaz Dragon; 22.11.2013

В Android Market доступны приложения, позволяющие указать «фиктивное местоположение GPS» для вашего устройства.

Я выполнил поиск по https://market.android.com и нашел приложение под названием "My Fake Location", которое мне подходит. .

Поставщик Mock GPS, упомянутый выше Полом (по адресу http://www.cowlumbus.nl/forum/MockGpsProvider.zip) - еще один пример, который включает исходный код, хотя мне не удалось установить предоставленный APK (там написано Failure [INSTALL_FAILED_OLDER_SDK] и может потребоваться перекомпиляция).

Чтобы использовать фиктивные местоположения GPS, вам необходимо включить его в настройках вашего устройства. Зайдите в «Настройки» -> «Приложения» -> «Разработка» и установите флажок «Разрешить фиктивные местоположения».

Затем вы можете использовать приложение, подобное описанному выше, для установки координат GPS и карт Google, а другие приложения будут использовать указанное вами фиктивное местоположение GPS.

person fijiaaron    schedule 11.08.2011
comment
Поддельный GPS проще. Мне просто интересно, почему они запрашивают идентификатор вызывающего абонента в разрешении приложения: S - person Guillaume Massé; 23.04.2013

Я создал простой Handler, имитирующий движущуюся позицию из начальной позиции.

Запустите его в обратном вызове соединения:

private final GoogleApiClient.ConnectionCallbacks mConnectionCallbacks = new GoogleApiClient.ConnectionCallbacks() {
    @Override
    public void onConnected(Bundle bundle) {
        if (BuildConfig.USE_MOCK_LOCATION) {
            LocationServices.FusedLocationApi.setMockMode(mGoogleApiClient, true);
            new MockLocationMovingHandler(mGoogleApiClient).start(48.873399, 2.342911);
        }
    }

    @Override
    public void onConnectionSuspended(int i) {

    }
};

Класс Handler:

   private static class MockLocationMovingHandler extends Handler {

    private final static int SET_MOCK_LOCATION = 0x000001;
    private final static double STEP_LATITUDE =  -0.00005;
    private final static double STEP_LONGITUDE = 0.00002;
    private final static long FREQUENCY_MS = 1000;
    private GoogleApiClient mGoogleApiClient;
    private double mLatitude;
    private double mLongitude;

    public MockLocationMovingHandler(final GoogleApiClient googleApiClient) {
        super(Looper.getMainLooper());
        mGoogleApiClient = googleApiClient;
    }

    public void start(final double initLatitude, final double initLongitude) {
        if (hasMessages(SET_MOCK_LOCATION)) {
            removeMessages(SET_MOCK_LOCATION);
        }
        mLatitude = initLatitude;
        mLongitude = initLongitude;
        sendEmptyMessage(SET_MOCK_LOCATION);
    }

    public void stop() {
        if (hasMessages(SET_MOCK_LOCATION)) {
            removeMessages(SET_MOCK_LOCATION);
        }
    }

    @Override
    public void handleMessage(Message message) {
        switch (message.what) {
            case SET_MOCK_LOCATION:
                Location location = new Location("network");
                location.setLatitude(mLatitude);
                location.setLongitude(mLongitude);
                location.setTime(System.currentTimeMillis());
                location.setAccuracy(3.0f);
                location.setElapsedRealtimeNanos(System.nanoTime());
                LocationServices.FusedLocationApi.setMockLocation(mGoogleApiClient, location);

                mLatitude += STEP_LATITUDE;
                mLongitude += STEP_LONGITUDE;
                sendEmptyMessageDelayed(SET_MOCK_LOCATION, FREQUENCY_MS);
                break;
        }
    }
}

Надеюсь, это поможет ..

person smora    schedule 11.07.2015

Это сработало для меня (Android Studio):

Отключите GPS и WiFi отслеживание на телефоне. На Android 5.1.1 и ниже выберите «Включить фиктивные местоположения» в параметрах разработчика.

Сделайте копию своего манифеста в каталоге src / debug. Добавьте к нему следующее (вне тега «application»):

использует-разрешение android: name = "android.permission.ACCESS_MOCK_LOCATION"

Установите фрагмент карты под названием «карта». Включите в onCreate () следующий код:

lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
ll = new MyLocationListener();
if (lm.getProvider("Test") == null) {
    lm.addTestProvider("Test", false, false, false, false, false, false, false, 0, 1);
}
lm.setTestProviderEnabled("Test", true);
lm.requestLocationUpdates("Test", 0, 0, ll);

map.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
    @Override
    public void onMapClick(LatLng l) {
        Location loc = new Location("Test");
        loc.setLatitude(l.latitude);
        loc.setLongitude(l.longitude);
        loc.setAltitude(0); 
        loc.setAccuracy(10f);
        loc.setElapsedRealtimeNanos(System.nanoTime());
        loc.setTime(System.currentTimeMillis()); 
        lm.setTestProviderLocation("Test", loc);
    }
};

Обратите внимание, что вам, возможно, придется временно увеличить «minSdkVersion» в вашем файле градиента модуля до 17, чтобы использовать метод «setElapsedRealtimeNanos».

Включите следующий код в основной класс активности:

private class MyLocationListener implements LocationListener {
    @Override
    public void onLocationChanged(Location location) {
        // do whatever you want, scroll the map, etc.
    }
}

Запустите приложение с AS. На Android 6.0 и выше вы получите исключение безопасности. Теперь перейдите к параметрам разработчика в настройках и выберите «Выбрать приложение фиктивного местоположения». Выберите свое приложение из списка.

Теперь, когда вы нажимаете на карту, onLocationChanged () срабатывает с координатами вашего касания.

Я только что понял это, так что теперь мне не нужно бродить по окрестностям с телефонами в руках.

person Chris B    schedule 14.08.2013
comment
я думаю, что он работает на android 6, если вы поставите этот код в сервис - person Hamza; 16.08.2017

Добавить в свой манифест

<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"
    tools:ignore="MockLocation,ProtectedPermissions" />

Функция фиктивного местоположения

void setMockLocation() {
    LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    locationManager.addTestProvider(LocationManager.GPS_PROVIDER, false, false,
            false, false, true, true, true, 0, 5);
    locationManager.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true);

    Location mockLocation = new Location(LocationManager.GPS_PROVIDER);
    mockLocation.setLatitude(-33.852);  // Sydney
    mockLocation.setLongitude(151.211);
    mockLocation.setAltitude(10);
    mockLocation.setAccuracy(5);
    mockLocation.setTime(System.currentTimeMillis());
    mockLocation.setElapsedRealtimeNanos(System.nanoTime());
    locationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER, mockLocation);
}

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

person Ian M    schedule 02.05.2019

Решение, упомянутое icyerasor и предоставленное Педро по адресу http://pedroassuncao.com/blog/2009/11/12/android-location-provider-mock/ мне очень понравился. Однако он не предлагает поддержки для правильного запуска, остановки и перезапуска ложного поставщика GPS.

Я немного изменил его код и переписал класс как AsyncTask вместо Thread. Это позволяет нам взаимодействовать с потоком пользовательского интерфейса, поэтому мы можем перезапустить провайдер в той точке, где мы были, когда остановили его. Это удобно при изменении ориентации экрана.

Код вместе с образцом проекта для Eclipse можно найти на GitHub: https://github.com/paulhoux/Android-MockProviderGPS

Вся заслуга в том, что Педро проделал большую часть тяжелой работы.

person Paul Houx    schedule 22.07.2011

Поддельное приложение GPS из Google Play помогло мне. Просто убедитесь, что вы прочитали все указания в описании приложения. Вы должны отключить другие службы определения местоположения, а также запустить приложение после включения «Поддельного GPS». Отлично работал для того, что мне было нужно.

Вот ссылка на приложение в GooglePlay: Fake GPS < / а>

person Igor    schedule 06.12.2012

Вышеупомянутые решения не сработали для меня, потому что я тестировал устройство Android с последней версией Google Play Services, в которой используется FusedLocationProviderClient. После установки разрешения фиктивного местоположения в манифесте приложения и приложения в качестве указанного приложения фиктивного местоположения в настройках разработчика (как упоминалось в предыдущих ответах) я затем добавил код Kotlin ниже, который успешно смоделировал местоположение.

locationProvider = FusedLocationProviderClient(context)
locationProvider.setMockMode(true)

val loc = Location(providerName)
val mockLocation = Location(providerName) // a string
mockLocation.latitude = latitude  // double
mockLocation.longitude = longitude
mockLocation.altitude = loc.altitude
mockLocation.time = System.currentTimeMillis()
mockLocation.accuracy = 1f
mockLocation.elapsedRealtimeNanos = SystemClock.elapsedRealtimeNanos()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    mockLocation.bearingAccuracyDegrees = 0.1f
    mockLocation.verticalAccuracyMeters = 0.1f
    mockLocation.speedAccuracyMetersPerSecond = 0.01f
}
//        locationManager.setTestProviderLocation(providerName, mockLocation)
locationProvider.setMockLocation(mockLocation)
person John A Qualls    schedule 01.01.2020

Учебник Google для этого можно найти здесь, он предоставляет примеры кода и объясняет процесс.

http://developer.android.com/training/location/location-testing.html#SendMockLocations

person Nik Pardoe    schedule 26.11.2013

Установите приложение Fake GPS https://play.google.com/store/apps/details?id=com.incorporateapps.fakegps.fre&hl=en.

Параметры разработчика -> Выберите приложение фиктивного местоположения (это означает, что выбрано приложение фиктивного местоположения).

Поддельное приложение GPS:

Двойная вкладка на карте для добавления -> нажмите кнопку воспроизведения -> Показать тост «Поддельное местоположение остановлено»

наконец, проверьте с помощью приложений карты Google.

person Manikandan K    schedule 25.07.2016

Я написал приложение, которое запускает веб-сервер (REST-Like) на вашем телефоне Android, так что вы можете установить положение GPS удаленно. На веб-сайте представлена ​​карта, на которой вы можете щелкнуть мышью, чтобы установить новое положение, или используйте клавиши «wasd» для перемещения в любом направлении. Приложение было быстрым решением, поэтому почти нет пользовательского интерфейса или документации, но реализация проста, и вы можете просмотреть все (только четыре) класса.

Репозиторий проекта: https://github.com/juliusmh/RemoteGeoFix

person juliusmh    schedule 05.08.2017

Если ваше устройство подключено к компьютеру и вы пытаетесь изменить шнуры отправки GPS с помощью элемента управления эмулятором, оно не будет работать.
Это элемент управления ЭМУЛЯТОР по какой-то причине.
Просто настройте его, чтобы обновить данные по GPS изменение.

lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);  

    ll = new LocationListener() {        
        public void onLocationChanged(Location location) {  
          // Called when a new location is found by the network location provider.  
            onGPSLocationChanged(location); 
        }

        public void onStatusChanged(String provider, int status, Bundle extras) {       
            bigInfo.setText("Changed "+ status);  
        }

        public void onProviderEnabled(String provider) {
            bigInfo.setText("Enabled "+ provider);
        }

        public void onProviderDisabled(String provider) {
            bigInfo.setText("Disabled "+ provider);
        }
      };

После обновления GPS перепишите следующий метод, чтобы он делал то, что вы хотите;

public void onGPSLocationChanged(Location location){  
if(location != null){  
    double pLong = location.getLongitude();  
    double pLat = location.getLatitude();  
    textLat.setText(Double.toString(pLat));  
    textLong.setText(Double.toString(pLong));  
    if(autoSave){  
        saveGPS();  
        }
    }
}

Не забудьте указать их в манифесте
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_MOCK_LOCATION

person Shadoath    schedule 30.05.2012

Интересно, нужна ли вам сложная настройка Mock Location. В моем случае, как только я получил местоположение исправления, я вызвал функцию, чтобы что-то сделать с этим новым местоположением. В таймере создайте фиктивную локацию. И вместо этого вызовите функцию с этим местоположением. Все время зная, что через короткое время GPS определит реальное текущее местоположение. Что нормально. Если у вас установлено достаточно большое время обновления.

person yalcin    schedule 09.10.2011

Возможно, это не подход «программиста», но если вы хотите сэкономить свое время и мгновенно получить рабочее решение, попробуйте одно из приложений, предназначенных для имитации местоположения, доступных в Google Play:

фальшивый спуфер GPS-местоположения

фиктивные местоположения

Поддельное местоположение GPS

person klimat    schedule 19.03.2015
comment
Вы их пробовали? Работали ли они, как указано в вопросе? - person arekolek; 02.02.2017
comment
Какие-нибудь предпочтения? Или все они нужны? :П - person arekolek; 07.03.2018
comment
Поддельный GPS Location Spoofer достаточно хорош, но Mock Locations позволяет установить маршрут, что является хорошей функцией. - person klimat; 07.03.2018

Воспользуйтесь очень удобным и бесплатным интерактивным симулятором местоположения для телефонов и планшетов Android (CATLES). Он имитирует местоположение GPS на общесистемном уровне (даже в приложениях Google Maps или Facebook) и работает как на физических, так и на виртуальных устройствах:

Веб-сайт: http://ubicom.snet.tu-berlin.de/catles/index.html

Видео: https://www.youtube.com/watch?v=0WSwH5gK7yg

person Sandro    schedule 29.12.2017

Используйте это разрешение в файле манифеста

<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION">

Студия Android порекомендует, чтобы «фиктивное местоположение запрашивалось только в файле манифеста для тестирования или отладки (обычно src / debug / AndroidManifest.xml)», просто отключите проверку

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

Использовать LocationManager

locationManager.addTestProvider(mocLocationProvider, false, false,
                false, false, true, true, true, 0, 5);
locationManager.setTestProviderEnabled(mocLocationProvider, true);

Теперь установите место, где хотите

Location mockLocation = new Location(mocLocationProvider); 
mockLocation.setLatitude(lat); 
mockLocation.setLongitude(lng); 
mockLocation.setAltitude(alt); 
mockLocation.setTime(System.currentTimeMillis()); 
locationManager.setTestProviderLocation( mocLocationProvider, mockLocation); 
person Nirmal prajapat    schedule 29.09.2017