Android получает местоположение от лучшего доступного провайдера

StackOverflow https://stackoverflow.com/questions/2919358

Вопрос

У меня есть этот код, чтобы получить лучшего доступного провайдера

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

locationListener = new MyLocationListener();
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
String provider = lm.getBestProvider(criteria, true);
Location mostRecentLocation = lm.getLastKnownLocation(provider);
if(mostRecentLocation != null) {
    latid=mostRecentLocation.getLatitude();
    longid=mostRecentLocation.getLongitude();
}
lm.requestLocationUpdates(provider, 1, 0, locationListener);

а затем слушатель

private class MyLocationListener implements LocationListener {

@Override
public void onLocationChanged(Location loc) {
  if (loc != null) {
    latid = loc.getLatitude();
    longid = loc.getLongitude();
    // if(loc.hasAccuracy()==true){
    accuracyd = loc.getAccuracy();
    String providershown = loc.getProvider();    
    accuracy.setText("Location Acquired. Accuracy:"
      + Double.toString(accuracyd) + "m\nProvider: "+providershown);
    accuracy.setBackgroundColor(Color.GREEN);
    // }
    userinfo=usernamevalue+"&"+Double.toString(latid)+"&"+Double.toString(longid);
    submituserlocation(userinfo);
   }
}

Когда я протестировал его на устройстве (htc Magic), я обнаружил, что при отключении GPS оно немедленно блокируется из сети.Когда я включаю GPS, он не берет никаких данных из сети и ждет, пока не заблокируется от GPS.
Я хотел бы заблокировать положение, как на картах Google, чтобы до тех пор, пока у них не будет хорошего сигнала GPS, они использовали сеть для определения моего местоположения.
Я думал, что это лучший критерий, но они выбирают поставщика один раз.
Что-то не так с моим кодом, или мне нужно использовать потоки, таймауты и т. д., чтобы это произошло?

Это было полезно?

Решение

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

Другие советы

Может быть, вы можете использовать getBestProvider (Criteria criteria, boolean enabledOnly) из LocationManager с критериями, как в эта другая тема.См. официальная документация.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top