2013-05-06 43 views
1

我正在使用GPS服务在我的应用中导出经度&经度。当信号可用时,我可以获得经纬度。一旦我得到一个修复,如果我不得不去一个地方,GPS无法获得定位,它仍然显示最后的位置。我想获得当前的位置,而不是其他。我已经尝试使用onLocationChanged()和onGpsStatusChanged()来获得GPS状态,但它没有给我结果。获取位置更改后的GPS状态

@Override 
public void onGpsStatusChanged(int arg0) { 
    // TODO Auto-generated method stub 
    if (event == GpsStatus.GPS_EVENT_STARTED) { 
     Log.d("zmenaGPS" , "GPS event started "); 
     GpsStatus gs = mlocManager.getGpsStatus(null); 
     Toast.makeText(getApplicationContext(),String.valueOf(gs),Toast.LENGTH_LONG).show(); 

    } else if (event == GpsStatus.GPS_EVENT_STOPPED) { 
     Log.d("zmenaGPS" , "GPS event stopped "); 
     GpsStatus gs = mlocManager.getGpsStatus(null); 
     Log.d("zmenaGPSgps status" , String.valueOf(gs)); 
     Toast.makeText(getApplicationContext(),String.valueOf(gs),Toast.LENGTH_LONG).show(); 

    } else if (event == GpsStatus.GPS_EVENT_FIRST_FIX) { 
     Log.d("zmenaGPS" , "GPS fixace "); 
     Toast.makeText(getApplicationContext(),"First Fix",Toast.LENGTH_LONG).show(); 
    } else if (event == GpsStatus.GPS_EVENT_SATELLITE_STATUS) { 
     Log.d("zmenaGPS" , "GPS EVET NECO "); 
    } 

} 

回答

-1

如果无法使用GPS得到的位置,您可能需要使用NETWORK PROVIDER得到的位置,并与你比较最后的位置锁定知道哪一个更好,相应地使用。

1

使用NETWORK_PROVIDER来取代所有时间更新的位置。 这样的..

public Location getLocation() { 
     try { 
      locationManager = (LocationManager) mContext 
        .getSystemService(Context.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, 0, 0, locationListenerNetwork); 
//     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, 0, 0, locationListenerGps); 
//      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(); 
          } 
         } 
        } 
       } 
      } 
//   if (!isGPSEnabled) { 
//    showSettingsAlert(); 
//   } 
     } catch (Exception e){ 
      e.printStackTrace(); 
     } 

     return location; 
    } 

希望这有助于

+0

我需要得到GPS的状态,它是否能得到一个位置固定或不 – 2013-05-06 07:02:17

+0

似乎@ meryld'souza,你没有得到的代码工作,你还期望? – gumuruh 2014-07-12 06:26:50

+0

gps的getLastKnownLocation总是返回null为什么?你也应该在启用网络之前启用gps启用代码,因为gps给出的位置更适合。 – 2016-08-20 18:58:53

0

这听起来像你想获得当前位置,你想知道当当前位置是未知的,所以你不要尝试使用旧的位置。在这种情况下,您可以尝试获取当前位置,然后测试它是否旧。

long fresh=60000; // 1 minute in milliseconds 
if(System.currentTimeMillis()-location.getTime()>fresh) 
    // Do something useful with location