геолокация не работает в Android - PullRequest
1 голос
/ 05 сентября 2011

У меня проблемы, я хотел бы использовать геолокацию с googleMap.У меня не было проблем с картой Google, просто, геолокация не выполнялась, а значения широты и долготы равны нулю

public void geolocalisation() {
    lmanager  = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

     lmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000l, 10l, new LocationListener(){
            public void onLocationChanged(Location arg0) {
                 latitude = arg0.getLatitude();
                 longitude = arg0.getLongitude();
            } 
            public void onProviderDisabled(String arg0) {} 
            public void onProviderEnabled(String arg0) {} 
            public void onStatusChanged(String arg0, int arg1, Bundle arg2) {}
        });
    GeoPoint position = new GeoPoint(microdegrees(longitude),microdegrees(latitude));

    MonOverlay marker = new MonOverlay(getResources().getDrawable(R.drawable.personne));//localisation point marker

    marker.addPoint(position);
    maMap.getOverlays().add(marker);
    monControler = this.maMap.getController();

}

, и это разрешения в androidManifest

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_GPS"/>
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS"/>

Не знаю, в чем проблемы?

Ответы [ 2 ]

1 голос
/ 05 сентября 2011

Я подозреваю, что проблема может заключаться в том, что 2-й и 3-й параметры в вашем вызове requestLocationUpdates. Они говорят, что посылают обновления местоположения самое большее каждую секунду и только если местоположение изменилось больше чем на 10 метров. В большинстве случаев сидеть за устройством разработки, работать в режиме отладки и наблюдать за LogCat, двигаясь со скоростью 10 метров в секунду, маловероятно.

Из документов API:

Частота уведомлений может контролироваться с помощью minTime и Параметры minDistance. Если minTime больше 0, LocationManager потенциально может отдыхать в течение минимальных миллисекунд между обновлениями местоположения, чтобы сохранить власть. Если minDistance больше чем 0, местоположение будет транслироваться, только если устройство перемещается счетчики minDistance. Чтобы получать уведомления как можно чаще, установите оба параметра на 0.

Кроме того, я думаю, вы захотите переместить следующие строки в ваш обработчик onLocationChanged, иначе они будут вызываться только один раз, а не с каждым обновлением;

GeoPoint position = new GeoPoint(microdegrees(latitude),microdegrees(longitude));

    MonOverlay marker = new MonOverlay(getResources().getDrawable(R.drawable.personne));//localisation point marker

    marker.addPoint(position);
    maMap.getOverlays().add(marker);
0 голосов
/ 05 сентября 2011

Ваш код вызывается асинхронно при изменении местоположения, например, метод onLocationChanged() вызывается при изменении местоположения.

Поэтому вы должны поместить всю свою логику для обновлений местоположения в этот метод.

Для первого запуска кода (местоположение меняется со временем, но вам нужно немедленно отобразить местоположение на карте), вы должны использовать lmanager.getLastKnownLocation().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...