设置GPS聆听超时

时间:2012-10-17 05:51:27

标签: android geolocation gps android-location

我能够从网络提供商那里获得位置更新,但是当涉及到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;
            }

    }

非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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) {
}
}