Android, получающий долготу и широту, всегда возвращает 0.0

Я пытаюсь получить долготу и широту для Android, вот мой код:

LocationManager locationManager = (LocationManager) this_activity.getSystemService(Context.LOCATION_SERVICE); LocationListener locationListener = new MyLocationListener(); locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 5000, 10, locationListener); public class MyLocationListener implements LocationListener { @Override public void onLocationChanged(Location loc) { longitude = Double.toString(loc.getLongitude()); latitude = Double.toString(loc.getLatitude()); } @Override public void onProviderDisabled(String provider) {} @Override public void onProviderEnabled(String provider) {} @Override public void onStatusChanged(String provider, int status, Bundle extras) {} } 

Разрешения манифеста:

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

Я всегда получаю 0.0s по долготе и широте

Кроме разрешений, которые @AshishPedhadiya упомянул, что вы слушаете только поставщика GPS.

 LocationListener locationListener = new MyLocationListener(); locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 5000, 10, locationListener); 

GPS не работает внутри. Поэтому, когда вы тестируете свое приложение, он всегда будет всегда возвращать местоположение (0,0). Возможно, вы захотите также прослушать NETWORK_PROVIDER, который, если GPS-местоположение отсутствует, оценивает местоположение, исходящее от сотовых вышек и точек WiFi.

 locationManager.requestLocationUpdates( LocationManager.NETWORK_PROVIDER, 5000, 10, locationListener); 

Кроме того, чтобы получить быстрое географическое местоположение, проверьте метод Application.getLastKnownLocation() .

 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> add this permission to your manifest file 

Я использовал этот GPSTracker:

 /** * Created by hassen on 9/20/14. */ public class GPSTracker extends Service implements LocationListener { private final Context mContext; // flag for GPS status boolean isGPSEnabled = false; // flag for network status boolean isNetworkEnabled = false; // flag for GPS status boolean canGetLocation = false; Location location; // location double latitude; // latitude double longitude; // longitude // The minimum distance to change Updates in meters private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters // The minimum time between updates in milliseconds private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute // Declaring a Location Manager protected LocationManager locationManager; public GPSTracker(Context context) { this.mContext = context; getLocation(); } public Location getLocation() { try { locationManager = (LocationManager) mContext .getSystemService(LOCATION_SERVICE); // 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 { this.canGetLocation = true; if (isNetworkEnabled) { locationManager.requestLocationUpdates( LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); Log.d("Network", "Network"); 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 if (isGPSEnabled) { if (location == null) { locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); Log.d("GPS Enabled", "GPS Enabled"); if (locationManager != null) { location = locationManager .getLastKnownLocation(LocationManager.GPS_PROVIDER); if (location != null) { latitude = location.getLatitude(); longitude = location.getLongitude(); } } } } } } catch (Exception e) { e.printStackTrace(); } return location; } /** * Stop using GPS listener * Calling this function will stop using GPS in your app * */ public void stopUsingGPS(){ if(locationManager != null){ locationManager.removeUpdates(GPSTracker.this); } } /** * Function to get latitude * */ public double getLatitude(){ if(location != null){ latitude = location.getLatitude(); } // return latitude return latitude; } /** * Function to get longitude * */ public double getLongitude(){ if(location != null){ longitude = location.getLongitude(); } // return longitude return longitude; } /** * Function to check GPS/wifi enabled * @return boolean * */ public boolean canGetLocation() { return this.canGetLocation; } /** * Function to show settings alert dialog * On pressing Settings button will lauch Settings Options * */ public void showSettingsAlert(){ AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext); // Setting Dialog Title alertDialog.setTitle("GPS is settings"); // Setting Dialog Message alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?"); // On pressing Settings button alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int which) { Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); mContext.startActivity(intent); } }); // on pressing cancel button alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); // Showing Alert Message alertDialog.show(); } @Override public void onLocationChanged(Location location) { // TODO Auto-generated method stub } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } } 

С основной деятельностью:

  GPSTracker gps = new GPSTracker(this_activity); if(gps.canGetLocation()){ latitude = Double.toString(gps.getLatitude()); longitude = Double.toString(gps.getLongitude()); // \n is for new line }else{ // can't get location // GPS or Network is not enabled // Ask user to enable GPS/network in settings gps.showSettingsAlert(); } 
 <!-- Needed only if your app targets Android 5.0 (API level 21) or higher. --> <uses-feature android:name="android.hardware.location.gps" /> 

Вам нужно добавить запрос разрешения в файл манифеста выше версии 5.0, как указано в Android-портале разработчика

Источник

Intereting Posts
Как приложение «Настройки» запускает неэкспонированную деятельность приложения? Android – Когда регистрировать / отменить регистрацию широковещательных ресиверов, созданных в виде активности? Использование SeekBar для управления объемом в Android? Динамическое создание байт-кода Dalvik в запущенном приложении Dalvik / Android Iptables правило перемещения в списке Изменить язык по умолчанию для приложений Android в приложении Последний com.google.android.gms для google play services revision 6 Ошибка: java.lang.UnsatisfiedLinkError с roboelectric и realm FileNotFoundException для HttpURLConnection в сэндвиче с мороженым Как использовать ресурс Idluso Idling Google Awareness API SecurityException бросается Как показать Toast в классе, расширенном методом BaseAdapter Get View Android: BroadcastReceiver при установке / удалении приложения Ошибка Android: MultipartEntity, запрос, отправленный клиентом, был синтаксически неправильным Как конвертировать речь в текст во время разговора с разными цветами текста для звонящего и вызова?