2014-01-07 3 views
1

Класс сервиса ReminderLogic вызывает класс обслуживания GPSTracker. isGPSEnabled - это правда. GPS был включен в устройство и явно находился под небом. Тем не менее lat и long 0.0.Невозможно получить длинные и длинные данные с помощью GPS-провайдера

location = locationManager 
           .getLastKnownLocation(Context.LOCATION_SERVICE); 

и

location = locationManager 
           .getLastKnownLocation(LocationManager.GPS_PROVIDER); 

дает местоположение в нуль.

Не мог бы кто-нибудь помочь мне.

// ReminderLogic Класс обслуживания

  GPSTracker gps; 
     double CurrLatitude, CurrLongitude; 
     Location CurrentLoc; 
     gps = new GPSTracker(HomePageActivity.this); 
if (gps.canGetLocation()) { 
       CurrLatitude = gps.getLatitude(); 
       CurrLongitude = gps.getLongitude(); 

       Toast.makeText(
         getApplicationContext(), 
         "canGetLocation is True. CurrLatitude and CurrLongitude is " 
           + CurrLatitude + CurrLongitude, Toast.LENGTH_LONG) 
         .show(); 
      } 

// GPS Tracker Класс обслуживания

  if (isGPSEnabled) { 

       this.canGetLocation = true; 
       if (location == null) { 
        locationManager.requestLocationUpdates(
          LocationManager.GPS_PROVIDER, 0, 0, this); 
        Log.d("GPS Enabled", "GPS Enabled"); 
        if (locationManager != null) { 
         location = locationManager 
           .getLastKnownLocation(Context.LOCATION_SERVICE); 
         location = locationManager 
           .getLastKnownLocation(LocationManager.GPS_PROVIDER); 
         if (location != null) { 
          latitude = location.getLatitude(); 
          longitude = location.getLongitude(); 
         } 
        } 
       } 
      } 

ответ

1

попытка переопределить onLocationChanges (Расположение местоположение)

 @Override 
    public void onLocationChanged(Location location) { 
    if (location != null) 
    { 
     Log.i("SuperMap", "Location changed : Lat: " + location.getLatitude() + " Lng: " + location.getLongitude()); 
     latitude = location.getLatitude(); 
     longitude = location.getLongitude(); 
     Log.i("latitude,longitude", ""+latitude+","+longitude); 


    } 
} 
0

Изменить код, :

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
if (locationManager != null) { 
    location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
    if (location != null) { 
     latitude = location.getLatitude(); 
     longitude = location.getLongitude(); 
    } 
} 

Надеюсь, что это поможет.

1

Прежде всего я объясню вам, почему ваш код не работает.

Вы используете GPS, чтобы получить место, которое занимает некоторое время, чтобы получить ваше местоположение и получить место пожаров onLocationChanged Слушатель.

Однако в своем коде вы просите GPS, чтобы получить ваше местоположение с помощью

locationManager.requestLocationUpdates(
          LocationManager.GPS_PROVIDER, 0, 0, this); 

, а затем ожидал, что это даст вам расположение в секунду. Для прослушивания местоположения, когда GPS отслеживает вас, вам нужен LocationListener. Это может занять до 20 минут и зависит от того, имеет ли GPS прямой доступ к спутнику, например. если ваше устройство находится внутри здания, GPS займет несколько минут, чтобы отслеживать вас, но если вы открываете GPS, вы будете отслеживать вас быстро.

Чтобы использовать LocationListener, просто добавьте implements LocationListener в декларацию вашего класса. Затем в onLocationChanged() используйте следующее, чтобы получить свое местоположение.

@Override 
    public void onLocationChanged(Location location) { 
    if (location != null) 
    { 
     Log.d("Location Found", location.getLatitude() + " " + location.getLongitude()); 
    locationManager.removeUpdates(this); 
    } 
} 

locationManager.removeUpdates(this); останавливает андроид отправлять вам места бесконечно и важно.

Также вы можете LocationListener класса внутри с помощью

LocationListener locationListener = new LocationListener() { 
     @Override 
     public void onLocationChanged(Location location) { 
       Log.d("Location Found", location.getLatitude() + " " + location.getLongitude()); 
    locationManager.removeUpdates(this); 
     } 

     @Override 
     public void onStatusChanged(String s, int i, Bundle bundle) { 

     } 

     @Override 
     public void onProviderEnabled(String s) { 

     } 

     @Override 
     public void onProviderDisabled(String s) { 

     } 
    } 

Но вы должны обновить requestLocationUpdates() как этого

locationManager.requestLocationUpdates(
          LocationManager.GPS_PROVIDER, 0, 0, locationListener); 

Update: -

Вы проверяете, если ваш locationManager не является нулевым после requestLocationUpdates(), который не будет null если вы его инициализировали.Затем вы используете

location = locationManager 
           .getLastKnownLocation(Context.LOCATION_SERVICE); 

получить последнее известное местоположение, которое будет присутствовать только если вы ранее использовали любое приложение, чтобы получить место. например. если вы используете приложение Google Maps для своего местоположения, то после того, как Google Maps обнаружит вашу позицию, вы откроете свое собственное приложение, после чего вы получите LastKnownLocation. Это связано с тем, что андроид имеет свою позицию из прошлого.

Если у вас никогда не было местоположения ранее, вы не получите никакого результата. Кроме того, это неправильный способ кодирования. Вы должны сделать как этот

location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
         if (location != null) { 
          latitude = location.getLatitude(); 
          longitude = location.getLongitude(); 
} 
else{ 
locationManager.requestLocationUpdates(
          LocationManager.GPS_PROVIDER, 0, 0, this); 
} 

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

+0

Вы хотите сказать, что мне нужно подождать 20 минут, чтобы получить место? Но я видел, что в примерах приложений он работает. – Stef

+0

Я сказал, что это может занять до 20 минут. Это зависит от того, где вы находитесь. GPS может заблокировать вас через 2 секунды или 20, но все зависит от вашего местоположения. –

+0

Не могли бы вы дать мне некоторое время? Я проверю это и скажу вам. Я использую Galaxy S3 – Stef

Смежные вопросы