【问题标题】:I want to use GPS but my code uses WiFi..!!! why?我想使用 GPS,但我的代码使用 WiFi ..!!!为什么?
【发布时间】:2011-05-13 07:30:57
【问题描述】:

我编写了以下代码来返回我当前的位置地址。但只有手动打开我的 Wifi 时,我才能获得这些值。但我想打开 Gps 并从 GPS 而不是 Wifi 获取我的地址。有人请告诉我要在此代码中修改什么。以下是用于定位我当前地址的代码。提前致谢。

public String myloc()
{ 
    criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    criteria.setAltitudeRequired(false);
    criteria.setBearingRequired(false);
    criteria.setCostAllowed(true);
    criteria.setPowerRequirement(Criteria.POWER_LOW);

    locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    String provider = locationManager.getBestProvider(criteria, true);

    // Update the GUI with the last known 
    Location location = locationManager.getLastKnownLocation(provider);

    if(location!=null)
    {
        double lat = location.getLatitude();
        double lng = location.getLongitude();
        latLongString = "Lat:" + lat + "\nLong:" + lng;

        Geocoder gc = new Geocoder(this, Locale.getDefault());
        try
        {
            List<Address> addresses = gc.getFromLocation(lat, lng, 1);
            StringBuilder sb = new StringBuilder();
            if (addresses.size() > 0) 
            {
              Address address = addresses.get(0);
              sb.append(address.getAddressLine(0)).append("\n");
              sb.append(address.getLocality()).append("\n");
              sb.append(address.getAdminArea()).append("\n");
              sb.append(address.getCountryName());

            }
            addressString = sb.toString();
        } 
        catch (IOException e)
        {

        }
    } 
    else 
    {
        latLongString = "No location found";
    }

    return addressString;
}

【问题讨论】:

    标签: android gps


    【解决方案1】:

    可能对你有帮助。

    下面是 MyLocation.Java 文件

    import java.util.Timer;
    import java.util.TimerTask;
    import android.content.Context;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.os.Bundle;
    
    public class MyLocation {
        Timer timer1;
        LocationManager lm;
        LocationResult locationResult;
        boolean gps_enabled=false;
        boolean network_enabled=false;
    
        public boolean getLocation(Context context, LocationResult result)
        {
            //I use LocationResult callback class to pass location value from MyLocation to user code.
            locationResult=result;
            if(lm==null)
                lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    
            //exceptions will be thrown if provider is not permitted.
            try{gps_enabled=lm.isProviderEnabled(LocationManager.GPS_PROVIDER);}catch(Exception ex){}
            try{network_enabled=lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);}catch(Exception ex){}
    
            //don't start listeners if no provider is enabled
            if(!gps_enabled && !network_enabled)
                return false;
    
            if(gps_enabled)
                lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListenerGps);
            if(network_enabled)
                lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListenerNetwork);
            timer1=new Timer();
            timer1.schedule(new GetLastLocation(), 60000);
            return true;
        }
    
        LocationListener locationListenerGps = new LocationListener() {
            public void onLocationChanged(Location location) {
                timer1.cancel();
                locationResult.gotLocation(location);
                lm.removeUpdates(this);
                lm.removeUpdates(locationListenerNetwork);
            }
            public void onProviderDisabled(String provider) {}
            public void onProviderEnabled(String provider) {}
            public void onStatusChanged(String provider, int status, Bundle extras) {}
        };
    
        LocationListener locationListenerNetwork = new LocationListener() {
            public void onLocationChanged(Location location) {
                timer1.cancel();
                locationResult.gotLocation(location);
                lm.removeUpdates(this);
                lm.removeUpdates(locationListenerGps);
            }
            public void onProviderDisabled(String provider) {}
            public void onProviderEnabled(String provider) {}
            public void onStatusChanged(String provider, int status, Bundle extras) {}
        };
    
        class GetLastLocation extends TimerTask {
            @Override
            public void run() {
                 lm.removeUpdates(locationListenerGps);
                 lm.removeUpdates(locationListenerNetwork);
    
                 Location net_loc=null, gps_loc=null;
                 if(gps_enabled)
                     gps_loc=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                 if(network_enabled)
                     net_loc=lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
    
                 //if there are both values use the latest one
                 if(gps_loc!=null && net_loc!=null){
                     if(gps_loc.getTime()>net_loc.getTime())
                         locationResult.gotLocation(gps_loc);
                     else
                         locationResult.gotLocation(net_loc);
                     return;
                 }
    
                 if(gps_loc!=null){
                     locationResult.gotLocation(gps_loc);
                     return;
                 }
                 if(net_loc!=null){
                     locationResult.gotLocation(net_loc);
                     return;
                 }
                 locationResult.gotLocation(null);
            }
        }
    
        public static abstract class LocationResult{
            public abstract void gotLocation(Location location);
        }
    }
    

    现在在另一个主类文件中使用了这个文件

    MyLocation myLocation = new MyLocation();
    
    @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.splash);
            findCurrentLocation();
    
        }
    
    private void findCurrentLocation() {
            myLocation.getLocation(this, locationResult);
        }
    
    public LocationResult locationResult = new LocationResult() {
    
            @Override
            public void gotLocation(Location location) {
                // TODO Auto-generated method stub
                if (location != null) {
                    String strloc  = location.getLatitude() + ","
                            + location.getLongitude();
                }
            }
        };
    

    现在“strloc”的 Toast 消息。

    谢谢, 尼克...

    【讨论】:

    • Hi@Nik... 请启用你的 gps chk 这个stackoverflow.com/questions/6027445/…
    • 您好 Nik,非常感谢您帮助我..我能够找到我的位置。
    • 这段代码很完美,它给了我几乎确切的位置:)
    【解决方案2】:

    因为你设置了这个:

    criteria.setAltitudeRequired(false);
    criteria.setBearingRequired(false);
    criteria.setCostAllowed(true);
    criteria.setPowerRequirement(Criteria.POWER_LOW);
    

    如果你只离开

    criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    

    将检索最好的提供程序作为 gps,但是 Nik... 的代码在许多情况下都非常有用

    【讨论】:

      猜你喜欢
      • 2020-10-31
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多