LocationManager.getSingleUpdate() не выполняет никакого обратного вызова — почему?

#android

#Android

Вопрос:

Итак, этот код работал в пятницу:

     public void requestLocationUpdate() {
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_COARSE);
        Intent updateIntent = new Intent(SINGLE_LOCATION_UPDATE_ACTION);
        PendingIntent singleUpdatePI = PendingIntent.getBroadcast(_context, 0, updateIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        IntentFilter locIntentFilter = new IntentFilter(SINGLE_LOCATION_UPDATE_ACTION);
        SingleUpdateReceiver receiver = new SingleUpdateReceiver(); 
        getApplicationContext().registerReceiver(receiver, locIntentFilter);
        locationManager.requestSingleUpdate(criteria, singleUpdatePI);  
    }

    class SingleUpdateReceiver extends BroadcastReceiver {      
        @Override
        public void onReceive(Context context, Intent intent) {
            // ... never invoked
        }
    }
  

Сегодня onReceive() просто не будет вызван. Есть ли какая-либо причина, по которой это не должно работать сегодня? Единственное, что изменилось, это то, что теперь я на другом маршрутизаторе WiFi.

Я вижу пару подозрительных строк в LogCat:

 06-23 15:10:36.540     709-7716/? D/LocationManagerServicerequest 430483d8 fused Request[ACCURACY_BLOCK fused requested= 10m0s0ms fastest= 10m0s0ms num=1] from com.nilzor.app(10195)
06-23 15:10:36.540     709-7716/? D/LocationManagerServiceprovider request: fused ProviderRequest[ON interval= 10m0s0ms]
  

… не знаю, актуально ли это?

Документация requestSingleUpdate указывает мне на requestLocationUpdates, что снова говорит мне, что для получения первого обновления может потребоваться некоторое время. Это верно и для requestSingleUpdate ? В пятницу обратный вызов был выполнен в течение секунды после запроса. Сегодня я пробовал более 10 раз, и он не сработал ни разу. 5 минут, считая с момента публикации.

Ответ №1:

Когда вы подключаетесь к wi-fi, вы получаете координаты от своего маршрутизатора. Не имеет значения, где вы находитесь, в вашей зоне / месте Wi-Fi используйте реальный gps или gps-спойлер.