Android: как проверить, что менеджер местоположений имеет getLastKnownLocation?

у меня есть код:

манифест

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

поля деятельности

 private LocationManager locationManager;
 private LocationListener mlocListener;

onCreate инициализация

locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
mlocListener = new MyLocationListener();
locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, mlocListener);

класс MyLocationListener

    public class MyLocationListener implements LocationListener{

        @Override
        public void onLocationChanged(Location loc){
        }


        @Override

        public void onProviderDisabled(String provider){
            Toast.makeText( getApplicationContext(), "Gps Disabled", Toast.LENGTH_SHORT ).show();
        }

        @Override
        public void onProviderEnabled(String provider){
            Toast.makeText( getApplicationContext(),"Gps Enabled",Toast.LENGTH_SHORT).show();
        }


        @Override

        public void onStatusChanged(String provider, int status, Bundle extras){
        }

    }

и у меня есть кнопка, onclick = получение местоположения пользователей по GPS

public void getUserLocation(View v){
    boolean enabled = locationManager
            .isProviderEnabled(LocationManager.GPS_PROVIDER);

    if (!enabled) {
          Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
              startActivity(intent);
    } else {
            Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
            Toast.makeText(getApplicationContext(), String.valueOf(location.getLatitude()) + " " + String.valueOf(location.getLongitude()), Toast.LENGTH_SHORT).show();
    }
}

на getLastKnownLocation у меня ошибка. как я могу проверить, что у locationManager есть getLastKnownLocation ?? requestLocationUpdates автоматически должен получить местоположение, не так ли ??

И мне интересно, какие параметры в requestLocationUpdates (minTime и minDistance) лучше использовать?? я не хочу слишком много съедать аккумулятор пользователей


person yital9    schedule 30.04.2012    source источник


Ответы (1)


как я могу проверить, что у locationManager есть getLastKnownLocation ??

Просто нулевая проверка сделает требуемое

requestLocationUpdates автоматически должен получить местоположение, не так ли ??

Как только вы запросите либо из сети, либо из Gps. Он начинает искать обновления местоположения. но это может занять время.

Обновления GPS приходят медленнее. Нужно открытое небо, но точнее.

сетевые обновления приходят быстрее. но менее точны по сравнению с GPS. В случае Wi-Fi точность сети составляет около 50-100, что хорошо для большинства сценариев.

И мне интересно, какие параметры в requestLocationUpdates (minTime и minDistance) лучше использовать?? я не хочу слишком много съедать аккумулятор пользователей

используйте 0,0, как только вы получите обновление желаемой точности, отмените регистрацию от обновлений местоположения прослушивания.

person Rohit Sharma    schedule 30.04.2012
comment
у меня здесь ошибка Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); я не могу обнулить проверку после - person yital9; 30.04.2012
comment
у меня есть исключение java.lang.NullPointerException, но почему я не получил null от getLastKnownLocation и не смог этого сделать, а не после ?? и почему я запросилLocationUpdates, но у менеджера местоположения нет этого LastKnownLocation?? - person yital9; 30.04.2012
comment
нулевое исключение решено, скажите, пожалуйста, почему requestLocationUpdates не устанавливает tLastKnownLocation?? и gettLastKnownLocation всегда возвращает null?? я тестирую приложение на эмуляторе, и хотя я не устанавливаю местоположение с помощью консоли, оно всегда возвращает ноль.. и на моем устройстве (телефоне) оно всегда возвращает ноль, но GPS включен - person yital9; 30.04.2012
comment
Интересно, правильно ли вы используете обновления GPS и сети. В любом случае, вы также можете сохранить последнее обновление самостоятельно. Сохраните объект Location в делегате onLocationChanged, чтобы использовать его. сохраните его в некоторой переменной Location экземпляра. если ваши делегаты onLocationChanged не вызываются ни разу. это означает, что вы не получаете никаких обновлений местоположения. если это вызывается, то вы его получили. и getLastKnownLocation также должен работать, чтобы вернуть это . Но я сам не очень на это полагаюсь. я сохраняю обновление местоположения с желаемой точностью и отменяю регистрацию в обновлении местоположения прослушивания. - person Rohit Sharma; 30.04.2012
comment
также попробуйте сделать это все на реальном устройстве - person Rohit Sharma; 30.04.2012
comment
у меня проблема, что на моем устройстве onLocationChanged никогда не звонит. GPS включен, а листнер настроен на диспетчер местоположения (код инициализации onCreate), в чем может быть проблема ?? - person yital9; 30.04.2012
comment
решено, спасибо, мне просто нужно выйти из дома, GPS не находит спутник.. мне нужно чаще гулять из дома, лол ) - person yital9; 30.04.2012