Как получить статус LocationProvider в Android

Я написал приведенный ниже код для получения лучшего доступного провайдера.

private static String provider;

    public static String setCriteria(LocationManager locationManager) {
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(true);
        criteria.setPowerRequirement(Criteria.POWER_MEDIUM);
        provider = locationManager.getBestProvider(criteria, true);
        LocationProvider locProvide = locationManager.getProvider(provider);        
        if (provider == null) {
            provider = LocationManager.GPS_PROVIDER;
        }
        return provider;
    }

У меня есть этот код, чтобы найти провайдера, который я буду использовать для получения местоположения. Теперь я хочу проверить, что статус Provider. Я прочитал из документа, что LocationProvider имеет 3 состояния Доступен, Не работает и ВРЕМЕННО_НЕДОСТУПЕН. Теперь, прежде чем запрашивать прослушиватель местоположения, мне нужно проверить статус.

Если статус, например, TEMPORARILY_UNAVAILABLE или Out of Service, пользователь получит соответствующее сообщение, иначе он найдет местоположение. Итак, мой вопрос, как я могу проверить статус?

Если у кого-то есть идеи, пожалуйста, помогите мне...


person Prem    schedule 14.04.2012    source источник


Ответы (2)


Вы можете попробовать использовать requestlocationupdates в своем объекте Locationmanager и реализовать свой объект Locationlistener... вот так..

   LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
LocationListener ll = new mylocationlistener();
lm.requestLocationUpdates(provider, 0, 0, ll);

    private class mylocationlistener implements LocationListener {
  ....

    @Override
public void onStatusChanged(String provider, int status, Bundle extras) {
  switch(status){
   case 0:
   //OutofService
     break;
   case 1:
    //Temporarily unavailable
   break;
   case 2:
  //Available
    break;

  }
}
person 5hssba    schedule 14.04.2012
comment
Я попробовал код, который вы дали. То, что я сделал, это просто всплывающие сообщения, но ничего не происходит. Можете ли вы сказать мне, когда будет запущен onStatusChanged? - person Prem; 14.04.2012

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

Хотя вы можете сделать и другую попытку подобную этой, но это не так гарантировать работу в любой ситуации.

person MKJParekh    schedule 14.04.2012