2012-10-17 133 views
1

我能够从网络提供商获取位置更新,但是当涉及到GPS时,需要花费大量时间来挑选数据。我想保留一段时间,只有GPS侦听器才能工作,然后在某个时间之后转移到网络提供商。如何解决这个问题?设置超时GPS侦听

这是我的代码..

public void gpslocation() 
    { 
     final LocationManager locationManager = (LocationManager) this 
     .getSystemService(Context.LOCATION_SERVICE); 

     LocationListener locationListener = new LocationListener() { 

    public void onLocationChanged(Location location) 

    { 
     updateLocationForGeo(location); 
     //update(location); 
     // Called when a new location is found by the network location provider. 
     makeUseOfNewLocation(location); 

    } 

    private void makeUseOfNewLocation(Location location) { 
     // TODO Auto-generated method stub 

    } 

    public void onStatusChanged(String provider, int status, 
      Bundle extras) { 
    } 

    public void onProviderEnabled(String provider) { 

     System.out.println(provider+ "enabled provider"); 

    } 


    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 
     System.out.println(provider+ "disabled provider"); 
     networklocation(); 



    } 

     }; 


    String locationProvider = LocationManager.GPS_PROVIDER; 
    locationManager.requestLocationUpdates(locationProvider, 10 * 1000, (float) 10.0,locationListener); 


      } 
    public void networklocation() 
    { 
     final LocationManager locationManager = (LocationManager) this 
     .getSystemService(Context.LOCATION_SERVICE); 

     LocationListener locationListener = new LocationListener() { 

    public void onLocationChanged(Location location) 

    { 
     updateLocationForGeo(location); 
     //update(location); 
     // Called when a new location is found by the network location provider. 
     makeUseOfNewLocation(location); 

    } 

    private void makeUseOfNewLocation(Location location) { 
     // TODO Auto-generated method stub 

    } 

    public void onStatusChanged(String provider, int status, 
      Bundle extras) { 
    } 

    public void onProviderEnabled(String provider) { 

     System.out.println(provider+ "enabled provider"); 

    } 


    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 
     System.out.println(provider+ "disabled provider"); 
     isGpsProvidersDisabled=true; 




    } 

     }; 



    String timeProvider = LocationManager.NETWORK_PROVIDER; 
    locationManager.requestLocationUpdates(timeProvider, 1 * 1000, (float) 10.0, locationListener); 

      } 
public void updateLocationForGeo(Location location){ 

    System.out.println("location updated"); 
    double dev_lat = location.getLatitude(); 
    double dev_lang = location.getLongitude(); 
    boolean out_of_range=false; 

    for(int i=0; i<arrayLength; i++){ 

     double lattDiff = Math.toRadians(latarr[i]-dev_lat); 

     double longDiff = Math.toRadians(lonarr[i]-dev_lang); 

     double distance=(Math.sin(lattDiff/2)*Math.sin(lattDiff/2))+(Math.sin(longDiff/2)*Math.sin(longDiff/2)*Math.cos(Math.toRadians(latarr[i]))*Math.cos(Math.toRadians(dev_lat))); 

     System.out.println(distance+" distance"); 
     double c= (2 * Math.atan2(Math.sqrt(distance), Math.sqrt(1-distance))); 



      double radius=radarr[i]* 1.60934; 



      double d = 6371 * c; 


     if(d>radius) 
      { 

     out_of_range=true; 
      continue; 

      } 
     else{ 
      System.out.println("enjoy"); 
      out_of_range=false; 
      break; 
      } 

    } 

任何帮助将不胜感激。

回答

0
LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
LocationListener mlocListener = new MyLocationListener(); 
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, 
     mlocListener); 

public class MyLocationListener implements LocationListener { 
private Address mAddresses; 
@Override 
public void onLocationChanged(Location loc) { 
    loc.getLatitude(); 
    loc.getLongitude(); 

    Geocoder gcd = new Geocoder(getApplicationContext(), 
      Locale.getDefault()); 
    try { 
     mAddresses = gcd.getFromLocation(loc.getLatitude(), 
       loc.getLongitude(), 1); 

    } catch (IOException e) { 

    } 

    String cityName = (mAddresses != null) ? mAddresses.get(0) 
      .getLocality() : TimeZone.getDefault().getID(); 
    String countryName = (mAddresses != null) ? mAddresses.get(0) 
      .getCountryName() : Locale.getDefault().getDisplayCountry() 
      .toString(); 


    mCurrentSpeed.setText("Longitude"+loc.getLongitude()+" Latitude"+loc.getLatitude()); 
} 

@Override 
public void onProviderDisabled(String provider) { 
    Toast.makeText(getApplicationContext(), "Gps Disabled", 
      Toast.LENGTH_SHORT).show(); 
} 

@Override 
public void onProviderEnabled(String provider) { 
    Toast.makeText(getApplicationContext(), "Gps Enabled", 
      Toast.LENGTH_SHORT).show(); 
} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
} 
} 
+0

其实IO我能够读出时的网络供应商可用,但仅通过GPS的时候是没有发生任何帮助如何检查GPS是工作或没有将更多helful – sindy90

+0

如果GPS信号强度是好的,你可以每秒接收更新并随时更新位置信息。您的气候条件可能是第一个原因,接下来您的设备GPS功能可能非常低。这些是你无法获得GPS信号的两个原因 – RajeshVijayakumar

+0

是的,这是正确的,但我想知道,如果我可以保持一个计时器说2分钟,如果gps不在那段时间移动到网络provider.If这是可能的,放置计时器,即在哪个功能(提供启用,onlocatin改变,onstatuschanged等)? – sindy90