Подтвердить что ты не робот

Тестирование GPS в Android

Как вы тестируете приложения GPS в Android? Можем ли мы протестировать его с помощью Android-эмулятора?

4b9b3361

Ответ 1

Да.

Если вы разрабатываете с использованием плагина Eclipse ADT, откройте перспективу DDMS после запуска эмулятора и найдите представление управления эмулятором. Существует секция управления местоположением, которая позволяет отправлять фиксированные координаты широты и долготы, или файлы GPX (формат GPS-обмена), или KML (Keyhole Markup Language), если вы хотите регулярно отправлять несколько координат (чтобы имитировать перемещение определенного маршрута).

В качестве альтернативы вы можете просто подключиться к эмулятору и использовать команду geo из командной строки, которая поддерживает фиксированные координаты широты и долготы, а также предложения данных NMEA:

telnet localhost 5554
geo fix -82.411629 28.054553
geo nmea $GPGGA,001431.092,0118.2653,N,10351.1359,E,0,00,,-19.6,M,4.1,M,,0000*5B

Ответ 2

Возможно, вы хотите использовать Unit test, чтобы вы могли попробовать следующее:

public class GPSPollingServiceTest extends AndroidTestCase {
    private LocationManager locationManager;

    public void testGPS() {
        LocationManager locationManager = (LocationManager) this.getContext().getSystemService(Context.LOCATION_SERVICE);
        locationManager.addTestProvider("Test", false, false, false, false, false, false, false, Criteria.POWER_LOW, Criteria.ACCURACY_FINE);
        locationManager.setTestProviderEnabled("Test", true);

        // Set up your test

        Location location = new Location("Test");
        location.setLatitude(10.0);
        location.setLongitude(20.0);
        locationManager.setTestProviderLocation("Test", location);

        // Check if your listener reacted the right way

        locationManager.removeTestProvider("Test");
    }
}


Для этого вам также потребуется необходимое разрешение для AndroidManifest.xml:

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

Ответ 3

Возможно это тестовое приложение или this может помогите вам.

Ответ 4

в дополнение к коду Mallox это сулотион для макета местоположения в дополнение к реальному местоположению gps: TEST_MOCK_GPS_LOCATION - это строка

LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    Location location = null;

    List providers = lm.getAllProviders();
    for (Object provider : providers) {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        Location loc = lm.getLastKnownLocation((String) provider);
        if  (provider.equals(TEST_MOCK_GPS_LOCATION))  {
            mLastLocation = loc;
        }
    } 

в тестовом классе это:

public class GPSPollingServiceTest extends AndroidTestCase {
private LocationManager locationManager;

public void testGPS() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
    LocationManager locationManager = (LocationManager) this.getContext().getSystemService(Context.LOCATION_SERVICE);
    List providers = locationManager.getAllProviders();
    if(!providers.contains(TEST_MOCK_GPS_LOCATION)) {
        locationManager.addTestProvider(TEST_MOCK_GPS_LOCATION, false, false, false, false, false, false, false, Criteria.POWER_LOW, Criteria.ACCURACY_FINE);
        locationManager.setTestProviderEnabled(TEST_MOCK_GPS_LOCATION, true);
        // Set up your test
        Location location = new Location(TEST_MOCK_GPS_LOCATION);
        location.setLatitude(34.1233400);
        location.setLongitude(15.6777880);
        location.setAccuracy(7);
        location.setTime(8);
        location.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());

        locationManager.setTestProviderLocation(TEST_MOCK_GPS_LOCATION, location);

        Method locationJellyBeanFixMethod = Location.class.getMethod("makeComplete");
        if (locationJellyBeanFixMethod != null) {
            locationJellyBeanFixMethod.invoke(location);
        }
    } else {
        // Check if your listener reacted the right way
        locationManager.removeTestProvider(TEST_MOCK_GPS_LOCATION);
    }
}

}

надеюсь, что это поможет вам

Ответ 5

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

Например:

Сначала вы отправляете местоположение с фиксированными координатами (например, центр Нью-Йорка).

//проверить, все ли в порядке

Затем вы отправляете координату, которая составляет 100 м от первой координаты. Вы можете сделать это с помощью функции, которую я реализовал недавно: fooobar.com/questions/298581/...

//проверить, все ли в порядке

Обычно методы GPS связаны со временем. Я предлагаю вам реализовать метод getNow() в классе слушателя и вызывать его всякий раз, когда вам нужно текущее время.

long getNow() {
    if (isUnitTesting) {
         return unitTestTime;
    } else {
         System.getcurrenttimemillis();
    }
}

В среде unit test вы просто устанавливаете obj.isUnitTesting = true и obj.unitTestTime в любое время. После этого вы можете отправить первое место слушателю, затем вы измените время (+ x секунд) и отправьте другое местоположение...

Это будет намного проще протестировать ваше приложение таким образом.

Ответ 6

В расширенных элементах управления вашего эмулятора (нажмите "..." на панели управления рядом с вашим эмулятором) есть вкладка "Место", где вы можете вручную вводить отдельные местоположения (широта/долгота/высота) и отправлять их к виртуальному устройству или настроить воспроизведение данных GPS с требуемой скоростью из GPX или файла KML, который вы можете импортировать.

Изменить: это эмулятор Android по умолчанию, о котором я говорю.