Intereting Posts

Сетевой провайдер Android LocationManager возвращает null

Я хотел получить координаты GPS с помощью приложения Android. Я начал развиваться, и я могу получить GPS-координаты, но они не точны. Я хотел использовать NETWORK_PROVIDER, но местоположение этого провайдера всегда равно нулю. Более интересно, isProvicerEnabled возвращает true.

Я использовал пример из этой темы (лучший ответ), введите ссылку здесь

private void _getLocation() { // Get the location manager try { boolean isGPSEnabled = false; boolean isNetworkEnabled = false; locationManager = (LocationManager) getApplicationContext().getSystemService(LOCATION_SERVICE); Location location = null; double latitude = -1; double longitude = -1; // getting GPS status isGPSEnabled = locationManager .isProviderEnabled(LocationManager.GPS_PROVIDER); // getting network status isNetworkEnabled = locationManager .isProviderEnabled(LocationManager.NETWORK_PROVIDER); if (!isGPSEnabled && !isNetworkEnabled) { // no network provider is enabled } else { if (isNetworkEnabled) { showToast("network"); locationManager.requestLocationUpdates( LocationManager.NETWORK_PROVIDER, 1000, 0, this); Log.d("Network", "Network Enabled"); if (locationManager != null) { location = locationManager .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); if (location != null) { latitude = location.getLatitude(); longitude = location.getLongitude(); } } } // if GPS Enabled get lat/long using GPS Services else if (isGPSEnabled) { showToast("gps"); if (location == null) { locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 1000, 0, this); Log.d("GPS", "GPS Enabled"); if (locationManager != null) { location = locationManager .getLastKnownLocation(LocationManager.GPS_PROVIDER); if (location != null) { latitude = location.getLatitude(); longitude = location.getLongitude(); } } } } } showToast("" + latitude + longitude); } catch (Exception e) { e.printStackTrace(); } 

У меня есть все разрешения в манифесте

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

Я знаю, что код грязный, но пока это только для тестирования. Мне что-то не хватает? Я нашел похожие примеры во многих местах, и это кажется довольно прямым, поэтому я немного смущен. Мой телефон работает нормально, GPS и сеть работают нормально. Например, приложение Google Maps хорошо работает. Какие-либо предложения?

Пожалуйста, НЕ используйте этот код. Это плохо. У него много ошибок. Кроме того, getLastKnownLocation вернет значение null, если оно еще не установлено. Который всегда будет, если никто на телефоне не использует requestUpdates.

Ваш код взят из класса, который был опубликован в очень старом потоке, называемом GPSTracker. Я пытался убить этот код в течение нескольких месяцев – он вызывает гораздо больше проблем, чем помогает. Если вам нужен лучший пример кода, попробуйте http://gabesechansoftware.com/location-tracking/, который является сообщением в блоге, которое я написал о том, насколько плохой код. Он покажет вам правильный способ сделать это и объяснит некоторые ошибки в этом коде.