requestLocationUpdates() занимает слишком много времени ИЛИ вообще не работает

Я использовал метод requestLocationUpdates внутри Service в своем приложении для Android для получения обновлений при изменении местоположения моего устройства. Я установил minTime = 0 Но этот метод requestLocationUpdates дает обновление после очень длительных задержек (от 10 до 15 минут или даже больше). А иногда, когда я запускаю свое приложение, requestLocationUpdates меход вообще не дает никаких обновлений. И несколько раз (очень редко) этот метод requestLocationUpdates ведет себя так, как ожидалось (выдает обновления непрерывно с задержкой 0 секунд). Так в чем может быть проблема? И как я могу получать обновления постоянно, каждый раз, когда я запускаю свое приложение?

HelloService.java

public class HelloService extends Service {
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                new Handler(getMainLooper()).post(new Runnable() {
                    @Override
                    public void run() {
                        LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
                        if (Build.VERSION.SDK_INT >= 23 && ContextCompat.checkSelfPermission(MainActivity.context, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(MainActivity.context, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                            return;
                        }
                        else {
                            manager.requestLocationUpdates("gps", 0, 0, new LocationDetector());
                            Toast.makeText(MainActivity.ctx, "Service Started...", Toast.LENGTH_LONG).show();
                        }
                    }
                });
            }
        }).start();
        return Service.START_STICKY;
    }
}

LocationDetector.java

public class LocationDetector implements LocationListener {    
    @Override
    public void onLocationChanged(Location location) {
        /*I have used here Log.e instead of Log.d in order to get the output in clear red message that is easily readable*/
        Log.e("GPS: ", location.getLatitude()+ ", " +location.getLongitude(), new Exception());
    }
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {}
    @Override
    public void onProviderEnabled(String provider) {}
    @Override
    public void onProviderDisabled(String provider) {}
}

person Sajal Ali    schedule 09.05.2016    source источник
comment
вы запрашиваете диспетчер местоположения, который возвращает ваше местоположение каждые 0 секунд и каждые 0 метров. так какое поведение вы на самом деле ожидаете?   -  person Oleg Khalidov    schedule 09.05.2016
comment
Выйдите на улицу, где действительно работает GPS.   -  person Markus Kauppinen    schedule 09.05.2016
comment
Это дубликат вашего предыдущего вопроса. Вы уже начали спамить Stack Overflow.   -  person Markus Kauppinen    schedule 09.05.2016


Ответы (1)


Я попробовал весь ваш код, создав новый проект на своем ноутбуке и запустив его на своем телефоне.

Результат: он работает, и GPS TTF составляет почти 15 секунд на моем телефоне.

Вы пробовали другие устройства?

А значок gps? появился, исчез?

И попробуйте совмещенный провайдер определения местоположения, чтобы узнать, что произойдет, ссылка

person blackkara    schedule 09.05.2016
comment
вы получаете обновление каждую секунду, каждый раз, когда вы запускаете свое приложение? - person Sajal Ali; 09.05.2016
comment
я получаю обновления местоположения с другим периодом, потому что он плохо работает с агрессивным использованием, таким как minTime = 0 и minDistance = 0. - person blackkara; 09.05.2016
comment
какова максимальная задержка между двумя обновлениями, которые вы наблюдали в своем исполнении? - person Sajal Ali; 09.05.2016
comment
после первого исправления (15 секунд) задержка составляла от 0 до 2000 миллисекунд. - person blackkara; 09.05.2016
comment
Я ждал до 30 минут, но обновления не было получено. появляется значок gps. Так это проблема в gps устройства? - person Sajal Ali; 09.05.2016
comment
Трудно сказать напрямую, что у вашего GPS-устройства проблема. Я думаю, вам стоит попробовать разные устройства. И зависит от того, где вы остановились, выйти на улицу или балкон. - person blackkara; 09.05.2016
comment
я должен использовать LocationManager.NETWORK_PROVIDER вместо "gps"? - person Sajal Ali; 09.05.2016
comment
я должен использовать LocationManager.NETWORK_PROVIDER вместо "gps"? - person Sajal Ali; 09.05.2016
comment
Давайте продолжим обсуждение в чате. - person blackkara; 09.05.2016