Обработка провайдера сети Android и провайдера GPS

Я сделал этот код, где я запрашиваю обновления о местоположении. Я хочу знать, правильно ли я его реализовал. Как только страница открыта, я запрашиваю обновления (предпочтение сети, а не GPS) ... и я отображаю местоположение в функции onlocationchanged. Я хочу спросить, возможно ли, что внутри onlocationchanged я получаю нулевое местоположение, подобное тому, когда я делаю getlastknownlocation? я перестал использовать ghetlastknownlocation, так как он время от времени возвращает nulll и неправильные значения.

      boolean isGPSEnabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
    boolean  isNetworkEnabled = lm
            .isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    if (!isGPSEnabled && !isNetworkEnabled)
    {   
        ProgressBar progress = (ProgressBar)findViewById(R.id.progress);
        progress.setVisibility(View.INVISIBLE);
        Utilities.showAlertDialog2(RegionalStoresMeActivity.this, "", ""+getResources().getString(R.string.nothing_enabled), false);
    }
    else if(isNetworkEnabled){
        // lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0, this);       
        lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0, this);
    }
    else if(isGPSEnabled ) {                                                                                      
               lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,1,0, this);
    } 

person user3278732    schedule 27.03.2014    source источник


Ответы (1)


Метод onLocationChanged() вызывается только тогда, когда это обновление местоположения с соответствующей широтой и долготой. Это может быть нулевым до малейшей возможности, но я никогда не испытывал этого.

Вы сделали это правильно, но я хотел бы сделать предложение. Рассмотрим сценарий-

Сетевой провайдер включен, и вы запросили обновления местоположения. Но по какой-то причине он не возвращает обновление местоположения (существует много случаев, когда провайдер местоположения не возвращает обновление местоположения, а также не обязательно возвращать обновления местоположения).

Теперь, согласно вашему коду, он не будет проверять поставщика GPS, потому что он находится в «иначе, если (isGPSEnabled)». Поэтому я предлагаю вам реализовать его только в операторе «если», как показано ниже.

if( isNetworkEnabled )
    lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0, this);

if( isGPSEnabled )                                                                                      
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,1,0, this);
person kevz    schedule 27.03.2014
comment
Хорошо, спасибо. не меняйте onlocation я делаю locationmanager.removeupdates - person user3278732; 27.03.2014
comment
если вы делаете locationmanager.removeupdates, он перестает прослушивать обновления местоположения. - person kevz; 27.03.2014
comment
мне это нужно только один раз, когда он открывает страницу. - person user3278732; 27.03.2014
comment
тогда ты прав. Как только вы получите обновление местоположения, вы можете немедленно перестать слушать дальнейшие обновления местоположения. - person kevz; 27.03.2014