Не удается заставить провайдера фиктивного местоположения на основе файлов NMEA работать - PullRequest
1 голос
/ 23 июля 2011

Я все еще работаю над своим первым испытанием для Android (для себя;)), и сейчас я нахожусь в состоянии, когда я хотел бы протестировать / отладить некоторые функции, основанные на местоположении, но я не могу заставить его работать вообще ...

Вот мой код, где я подписываюсь на обновления Nav:

LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
// We create the mock location provider
try {
    locationManager.addTestProvider("mockgps", false, false,
            false, false, true, true, true, 0, 5);
} catch (IllegalArgumentException e) {
    Log.w(getString(R.string.debug_tag),String.format("%s: mockgps was already created...", this.getClass().getSimpleName()));;
}

// Debugging we have the providers we need
List<String> providers = locationManager.getAllProviders();
Log.v(getString(R.string.debug_tag),String.format("%s: location provider ={%s}...", this.getClass().getSimpleName(), providers));

locationManager.requestLocationUpdates("mockgps", 100L, 0, locationListener);

// Some code removed
locationManager.setTestProviderEnabled("mockgps", true);

Здесь мой файл NMEA, который я отправил в / data / misc / location / mockgps / nmea

geo nmea $GPGGA,101205.0,4341.421828,N,00355.725347,E,1,09,0.9,80.1,M,49.0,M,,*6B
geo nmea $GPRMC,101205.0,A,4341.421828,N,00355.725347,E,0.0,,210711,,,A*47
geo nmea $GPGSA,A,3,09,12,15,17,18,22,26,27,28,,,,1.7,0.9,1.4*32
geo nmea $GPGGA,101206.0,4341.421827,N,00355.725350,E,1,09,0.9,80.1,M,49.0,M,,*61
geo nmea $GPRMC,101206.0,A,4341.421827,N,00355.725350,E,0.0,,210711,,,A*4D
geo nmea $GPGSA,A,3,09,12,15,17,18,22,26,27,28,,,,1.7,0.9,1.4*32
geo nmea $GPGGA,101207.0,4341.421825,N,00355.725354,E,1,09,0.9,80.1,M,49.0,M,,*66
geo nmea $GPRMC,101207.0,A,4341.421825,N,00355.725354,E,0.0,,210711,,,A*4A
geo nmea $GPGSA,A,3,09,12,15,17,18,22,26,27,28,,,,1.7,0.9,1.4*32
geo nmea $GPGGA,101208.0,4341.421825,N,00355.725354,E,1,09,0.9,80.1,M,49.0,M,,*69
geo nmea $GPRMC,101208.0,A,4341.421825,N,00355.725354,E,0.0,,210711,,,A*45
geo nmea $GPGSA,A,3,09,12,15,17,18,22,26,27,28,,,,1.7,0.9,1.4*32
geo nmea $GPGGA,101209.0,4341.420608,N,00355.725766,E,1,09,0.9,79.9,M,49.0,M,,*63
geo nmea $GPRMC,101209.0,A,4341.420608,N,00355.725766,E,0.0,,210711,,,A*41
geo nmea $GPGGA,101210.0,4341.420878,N,00355.726052,E,1,09,1.1,80.0,M,49.0,M,,*67
geo nmea $GPRMC,101210.0,A,4341.420878,N,00355.726052,E,0.0,,210711,,,A*43
geo nmea $GPGSA,A,3,09,12,15,17,18,22,26,27,28,,,,1.8,1.1,1.4*34
geo nmea $GPGGA,101211.0,4341.421209,N,00355.726245,E,1,09,0.9,78.9,M,49.0,M,,*68
geo nmea $GPRMC,101211.0,A,4341.421209,N,00355.726245,E,0.0,,210711,,,A*4B
geo nmea $GPGSA,A,3,09,12,15,17,18,22,26,27,28,,,,1.7,0.9,1.4*32
geo nmea $GPGGA,101212.0,4341.421025,N,00355.726918,E,1,09,1.0,78.3,M,49.0,M,,*66
geo nmea $GPRMC,101212.0,A,4341.421025,N,00355.726918,E,0.0,,210711,,,A*47
geo nmea $GPGSA,A,3,09,12,15,17,18,22,26,27,28,,,,1.7,1.0,1.4*3A
geo nmea $GPGGA,101213.0,4341.421078,N,00355.726329,E,1,09,0.9,78.7,M,49.0,M,,*6B
geo nmea $GPRMC,101213.0,A,4341.421078,N,00355.726329,E,0.0,,210711,,,A*46
geo nmea $GPGSA,A,3,09,12,15,17,18,22,26,27,28,,,,1.7,0.9,1.4*32
geo nmea $GPGGA,101214.0,4341.420836,N,00355.726263,E,1,09,1.1,79.3,M,49.0,M,,*6C
geo nmea $GPRMC,101214.0,A,4341.420836,N,00355.726263,E,0.0,,210711,,,A*4D
geo nmea $GPGSA,A,3,09,12,15,17,18,22,26,27,28,,,,1.8,1.1,1.4*34
geo nmea $GPGGA,101215.0,4341.420796,N,00355.726174,E,1,09,1.1,79.7,M,49.0,M,,*69
geo nmea $GPRMC,101215.0,A,4341.420796,N,00355.726174,E,0.0,,210711,,,A*4C
geo nmea $GPGSA,A,3,09,12,15,17,18,22,26,27,28,,,,1.8,1.1,1.4*34
geo nmea $GPGGA,101216.0,4341.420774,N,00355.725884,E,1,06,1.1,80.1,M,49.0,M,,*6C
geo nmea $GPVTG,nan,T,nan,M,0.0,N,0.0,K,A*23
geo nmea $GPRMC,101216.0,A,4341.420774,N,00355.725884,E,0.0,,210711,,,A*46
geo nmea $GPGSA,A,3,09,12,15,18,22,27,,,,,,,1.8,1.1,1.4*3C
geo nmea $GPGGA,101217.0,4341.420783,N,00355.725775,E,1,06,1.1,80.4,M,49.0,M,,*61
geo nmea $GPRMC,101217.0,A,4341.420783,N,00355.725775,E,0.0,,210711,,,A*4E
geo nmea $GPGSA,A,3,09,12,15,18,22,27,,,,,,,1.8,1.1,1.4*3C
geo nmea $GPGSV,4,1,16,09,48,291,35,18,27,291,35,15,80,212,33,22,08,322,28*7E
geo nmea $GPGSV,4,2,16,12,20,217,27,27,65,313,24,26,45,133,24,17,31,092,21*77
geo nmea $GPGSV,4,3,16,32,,,,31,,,,30,,,,29,,,*72
geo nmea $GPGSV,4,4,16,25,,,,24,,,,23,,,,21,,,*7D
geo nmea $GPGGA,101218.0,4341.420815,N,00355.725879,E,1,06,1.1,80.5,M,49.0,M,,*6C
geo nmea $GPRMC,101218.0,A,4341.420815,N,00355.725879,E,0.0,,210711,,,A*42
geo nmea $GPGSA,A,3,09,12,15,18,22,27,,,,,,,1.8,1.1,1.4*3C

У меня довольно сложная регистрация в слушателе, и абсолютно НИЧЕГО не происходит ... Я не получаю никаких обновлений статуса GPS, никакого обновления местоположения вообще ...

Ваша помощь будет высоко ценится. Это настоящая боль, потому что я даже не могу думать о том, что приходится делать какие-то одиночные тесты на реальном телефоне (исключая риск его поломки, у меня есть только свой «настоящий» телефон, с которым можно играть).

Я все еще работаю с эмулятором, и мое тестовое устройство - 2.3.3.

Для записи вот код слушателя:

LocationListener locationListener = new LocationListener() {

    public void onLocationChanged(Location location) {
        // Called when a new location is found by the network location provider.
        Log.v(getString(R.string.debug_tag),String.format("%s: got new location (%s)",
                NavManager.class.getSimpleName(), location.toString()));
        if (currentLocation != null) {
            lastLocation = currentLocation;
            currentLocation = new Location(location);
        }

        if (navigation == null) {
            navigation = new Navigation();
        }

        navigation.setLocation(currentLocation);
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {
        locProvider = provider;
        locProviderStatus = status;
        Log.v(getString(R.string.debug_tag),String.format("%s: location provider status changed (povider=\"%s\", status=%d)",
                NavManager.class.getSimpleName(), locProvider, locProviderStatus));
    }

    public void onProviderEnabled(String provider) {}

    public void onProviderDisabled(String provider) {}
  };   

Ответы [ 2 ]

0 голосов
/ 11 мая 2012

В эмуляторе есть ошибка, из-за которой NmeaListener onNmeaReceived (длинная метка времени, строка nmea) никогда ничего не получает.

0 голосов
/ 23 июля 2011

Вы можете просто отправить координаты из перспективы DDMS для проверки кода, нет необходимости загружать файл NMEA.Существует так много данных, как strings для координат, высоты, скорости, пролета.скорость, курс, количество спутников, отслеживаемые спутники, которые будут извлечены из этого файла.Делай легкий путь.Извлечение всех этих строк займет у вас много времени.

С помощью средства контроля местоположения в DDMS вы по-прежнему отправляете тип фиктивных координат, фактически вы моделируете устройство GPS, которое также отправляет тот же файл NMEA, но использование прощечем анализировать / извлекать все строки.

Смотрите здесь, какую информацию предоставляет файл NMEA http://aprs.gids.nl/nmea/

...