Как я могу высмеять свое местоположение на физическом устройстве (Nexus One)? Я знаю, что вы можете сделать это с эмулятором на панели управления эмулятором, но это не работает для физического устройства.Android mock location на устройстве?
ответ
Кажется, единственный способ сделать это - использовать провайдера определения местоположения.
Вы должны включить фиктивные местоположения в панели разработки в настройках и добавьте
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
в манифест.
Теперь вы можете зайти в свой код и создать свой собственный провайдер определения местонахождения и указать местоположение этого провайдера.
неработающая ссылка :(plz update –
На рынке есть приложение под названием «Fake GPS». Если вы включите Mock Locations на своем устройстве, он предлагает удобный графический интерфейс для настройки вашего местоположения. Я понимаю, что это не так. - свое решение, но, безусловно, достойное решение для быстрого тестирования. –
[this] (http://pedroassuncao.com/2009/11/android-location-provider-mock/) может быть ссылкой - той же датой и соответствующим контентом. – DefenestrationDay
Если вы используете этот телефон только в лаборатории разработки, есть вероятность, что вы можете припаять GPS-чип и последовательный порт подачи напрямую с помощью последовательностей NMEA с другого устройства.
Вы можете использовать разрешение Опред.местополож на макете место ...
"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);
Я хотел бы я имел мой кабель под рукой. Я знаю, что вы можете телнет к эмулятору, чтобы изменить его расположение
$ telnet localhost 5554
Android Console: type 'help' for a list of commands
OK
geo fix -82.411629 28.054553
OK
Я не могу вспомнить, если вы можете телнет к устройству, но я думаю, что вы можете. Надеюсь, это поможет.
Для этого (CLI) вам понадобится adb (модем для отладки android).
вы получаете разрешение, запрещенное всем, что вы отправляете в качестве команды на консоль вашего устройства. Возможно, это возможно с помощью приложения с терминалом, но я думаю, что для этого нужен root-доступ. – Janusz
Просто так мы находимся на одной странице: вы не говорите об «оболочке adb», так? То, о чем я говорю, отличается, это настройка, которая позволяет вам устанавливать специфичные для Android параметры. Я знаю, например, вы можете настроить переадресацию портов (то есть localhost: 1234 переходит на телефон: 1234) без доступа root, поэтому вы можете настроить прокси-сервер SOCKS и туннель через кабель без root. –
Вы можете использовать adb forward tcp: 6000 tcp: 23, чтобы переместить порт 6000 на ваш компьютер в порт 23 на устройстве, но я не смог подключиться, даже если порт показан как открытый. Использование telnet-клиента на устройстве и подключение к localhost также не удается – Janusz
У меня был успех со следующим кодом. Хотя по какой-то причине он получил мне один замок (даже если я пробовал разные пары 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
);
}
Хороший пост, см. мой ответ ниже для дополнений. – icyerasor
Что такое 'setTestProviderStatus'? Я не вижу цели ... –
Насколько я помню,' setTestProviderStatus' используется здесь, чтобы уведомлять/отправлять/планировать событие с помощью LocationManager, что поставщик GPS нашел исправление «сейчас», так что обработка этого события может произойти. – Dr1Ku
Что Dr1Ku размещены работы. Используется код сегодня, но необходимо добавить больше locs. Итак, вот некоторые улучшения:
Необязательно: вместо использования строки 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 Вы также найдете код, который на самом деле работает для меня на эмуляторе.
Прохладное предложение об определении вашего собственного провайдера, вещь с использованием GPS_PROVIDER заключается в том, что вы (по-видимому) не можете избавиться от макет провайдера (точнее, вы не можете переключиться на обычный GPS) до перезагрузки. Удивительный пост, я также проверю ссылки! – Dr1Ku
@ Dr1KU До сих пор не удается вернуться к нормальному GPS? Это где-то указано? –
@ KazDragon Тогда это было тогда. Из того, что я могу вспомнить, после включения «Mock Provider» нормальный GPS не работал, я не мог получить исправление (я тестировал непосредственно на устройстве). Это может быть не так, поскольку с тех пор многое произошло в Android. – Dr1Ku
Решение, упомянутое icyerasor и предоставленное Педро в http://pedroassuncao.com/blog/2009/11/12/android-location-provider-mock/, очень хорошо работало для меня. Тем не менее, он не предлагает поддержки для правильного запуска, остановки и повторного запуска провайдера mock GPS.
Я немного изменил свой код и переписал класс как AsyncTask вместо Thread. Это позволяет нам связываться с потоком пользовательского интерфейса, поэтому мы можем перезапустить поставщика в тот момент, когда мы были, когда остановили его. Это пригодится, когда меняется ориентация экрана.
код вместе с образцом проекта Затмения, можно найти на GitHub: https://github.com/paulhoux/Android-MockProviderGPS
Все кредиты должны пойти в Педро для делать большую часть тяжелой работы.
В Android Market есть приложения, которые позволяют указать «Mock GPS Location» для вашего устройства.
Я искал https://market.android.com и нашел приложение под названием «My Fake Location», которое работает для меня.
Поставщик Mock GPS, упомянутый Paul выше (at http://www.cowlumbus.nl/forum/MockGpsProvider.zip), является еще одним примером, включающим исходный код - хотя я не смог установить предоставленный APK (он говорит об ошибке [INSTALL_FAILED_OLDER_SDK] и может просто понадобиться перекомпиляция)
Чтобы использовать топовые местоположения GPS, вам необходимо включить его в настройках вашего устройства. Перейти к настройкам -> Приложения -> Разработка и проверка «Разрешить макет местоположения»
Вы можете использовать приложение, подобное описанному выше, чтобы установить GPS-координаты, а карты Google и другие приложения будут использовать указанное вами местоположение, ,
очень полезный пример .. – NullPointerException
Fake GPS проще. Мне просто интересно, почему они запрашивают идентификатор вызывающего абонента в разрешении на приложение: S –
Интересно, нужна ли вам сложная настройка местоположения Mock. В моем случае, когда я получил место для исправления, я вызывал функцию, чтобы что-то сделать с этим новым местоположением. В таймере создайте макет местоположения. И вместо этого вызовите функцию с этим местоположением. Зная все это, в скором времени GPS будет иметь реальное текущее местоположение. Это нормально. Если время обновления установлено достаточно долго.
Если ваше устройство подключено к компьютеру, и вы пытаетесь изменить отправку GPS-кабелей. С помощью регулятора Emulator он не будет работать.
Это элемент управления EMULATOR по какой-либо причине.
Просто установите его, чтобы обновить вас при смене 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();
}
}
}
Не забудьте положить их в Фиктивный приложение GPS манифеста
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_MOCK_LOCATION
из Google Play сделал трюк для меня. Просто убедитесь, что вы прочитали все указания в описании приложения. Вы должны отключить другие службы определения местоположения, а также запустить свое приложение после включения «Fake GPS». Работал отлично для того, что мне было нужно.
Вот ссылка на приложение на GooglePlay: Fake GPS
Это работает для меня (Android студия):
Отключить GPS и WiFi отслеживания по телефону. На Android 5.1.1 и ниже выберите «включить макет местоположения» в «Параметры разработчика».
Сделайте копию своего манифеста в каталоге src/debug. Добавьте следующий к нему (за пределами «приложения» метки):
использует разрешение-андроида: имя = «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» в вашем модуле Gradle файла до 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() будет стрелять с координатами вашего крана.
Я просто понял это, поэтому теперь мне не нужно бродяжничать по соседству с телефонами в руке.
не работает с Android 6 –
Я думаю, что он работает на android 6, если вы положили этот код на службу – Hamza
Учебник Google для этого можно найти здесь, он содержит примеры кода и объясняет процесс.
http://developer.android.com/training/location/location-testing.html#SendMockLocations
Может быть, это не «программист» подход, но если вы хотите сэкономить время и получить рабочий раствор мгновенная попробовать один из приложений, посвятивших издеваться расположение доступны в Google Play:
Я создал простой обработчик, имитирующий движущееся положение из исходного положения.
Запустить его в связи обратного вызов:
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;
}
}
}
Надеется, что это может помочь ..
Установить поддельное приложение GPS https://play.google.com/store/apps/details?id=com.incorporateapps.fakegps.fre&hl=en
Параметры разработчика ->Выберите приложение для определения местоположения (Это означает, что выбрано приложение «Поддельное местоположение»).
Поддельные приложение GPS:
Двойной язычок на карте, чтобы добавить -> нажмите на кнопку воспроизведения -> Показать тост «Поддельные место остановил»
наконец проверить с Google Map приложений.
Я написал приложение, которое запускает WebServer (REST-Like) на Android-телефоне, поэтому вы можете установить GPS-позицию удаленно. На веб-сайте представлена карта, на которую вы можете щелкнуть, чтобы установить новую позицию, или использовать клавиши «wasd» для перемещения в любом направлении. Приложение было быстрым решением, поэтому почти нет пользовательского интерфейса или документации, но реализация прямолинейна, и вы можете искать все в классах (всего четыре).
хранилищеИспользуйте это разрешение в файле манифеста
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION">
андроид студия будет рекомендовать «Мок место должно быть запрошены только в тестовой или отладки конкретного файла манифеста (обычно Src/отладки/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);
Используйте очень удобный и бесплатный интерактивный симулятор местоположения для телефонов и планшетов Android (названных CATLES). Он высмеивает GPS-местоположение на уровне всей системы (даже в пределах приложения Google Maps или Facebook), и она работает на физическом, так и виртуальных устройств:
- 1. mock location in android
- 2. Android Mock Location «Teleporting»
- 3. Mock location on android 4.2.2 (Nexus 4)
- 4. android Mock location не работает с locationservices.fusedlocationapi
- 5. Почему нет «Выберите Mock Location App»?
- 6. Android: Mock Location меняется на оригинал через несколько секунд
- 7. setElapsedRealtimeNanos() call in android mock location provider app
- 8. Приложение для проверки ошибок Android с использованием Mock Location
- 9. Как использовать Google Navigation с Mock Location
- 10. Android Mock location не работает с картами google
- 11. Смещение местоположения на устройстве Android
- 12. GeoFence Not Triggered w/Mock Location
- 13. Set Mock Location с использованием Gcm-уведомления
- 14. Android webview location redirect
- 15. Location Based Services на Android
- 16. GPS Location не работает на Android
- 17. Используйте mock location, не устанавливая его в настройках
- 18. Android Location-Based App
- 19. Android: Регистрация на Android-устройстве
- 20. Сервер на устройстве android
- 21. Android - Отладка на устройстве
- 22. Android на устройстве Отладка
- 23. XACML на Android-устройстве?
- 24. Автоматизация на устройстве Android
- 25. PHPUnit на устройстве Android
- 26. Android Location based application
- 27. Spoofing Location
- 28. Android NETWORK_PROVIDER location
- 29. Android Phone Location API
- 30. Android Location based app
На рынке есть несколько приложений, которые могут эмулировать местоположение GPS. Например, «Распознавание местоположения». – Vlad
Для настольных компьютеров вы можете создавать/устанавливать драйверы, которые эмулируют устройство GPS/последовательный порт для целей такого рода тестирования. Возможно, вы могли бы создать или найти что-то подобное для Android. – AaronLS
В этом магазине есть много приложений. Вы можете попробовать это: https://play.google.com/store/apps/details?id=com.yedapps.fakelocation.app.app.fakelocation&hl= en или this - https://play.google.com/store/apps/details?id=com.fakegps.mock&hl=ru – Yehuda