2010-09-29 91 views
1

我在2.1中获取GPS坐标时遇到了问题。在android 2.1中获取GPS坐标的问题(找到答案)

我使用的,现在在1.6工作良好,但是当我测试 1.6设备此相同的APK是显示空值

请帮我找到一种方法,与2.1设备也

工作的代码

这是我的代码。

public class GpsLocator { 

    private static String PROVIDER="gps"; 
    private LocationManager myLocationManager=null; 

    public GpsLocator(Context context) { 
     myLocationManager=(LocationManager)context.getSystemService(Context.LOCATION_SERVICE); 
    } 

    public void myOnresume() { 
     myLocationManager.requestLocationUpdates(PROVIDER, 0, 0, onLocationChange); 
    } 

    public void myonPause() { 
     myLocationManager.removeUpdates(onLocationChange); 
    } 

    public double getLatitude() { 
     Location loc=myLocationManager.getLastKnownLocation(PROVIDER); 
     if (loc==null) { 
     return(0); 
     } 
     return(loc.getLatitude()); 
    } 

    public double getLongitude() { 
     Location loc=myLocationManager.getLastKnownLocation(PROVIDER); 
     if (loc==null) { 
     return(0); 
     } 

     return(loc.getLongitude()); 
    } 

    LocationListener onLocationChange=new LocationListener() { 

     public void onLocationChanged(Location location) { 
     } 

     public void onProviderDisabled(String provider) { 
     // required for interface, not used 
     } 

     public void onProviderEnabled(String provider) { 
     // required for interface, not used 
     } 

     public void onStatusChanged(String provider, int status,Bundle extras) { 
     // required for interface, not used 
     } 
    }; 
} 
清单文件我添加权限访问文件

他们

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

回答

3
LocationManager locationManager; 
    String context = Context.LOCATION_SERVICE; 
    locationManager = (LocationManager)getSystemService(context); 
    Criteria criteria = new Criteria(); 
    criteria.setAccuracy(Criteria.ACCURACY_FINE); 
    criteria.setAltitudeRequired(false); 
    criteria.setBearingRequired(false); 
    criteria.setCostAllowed(true); 
    criteria.setPowerRequirement(Criteria.POWER_LOW); 
    String provider = locationManager.getBestProvider(criteria, true); 

    Location location = locationManager.getLastKnownLocation(provider); 

    updateWithNewLocation(location); 

    locationManager.requestLocationUpdates(provider, 2000, 10, 
              locationListener); 
    } 

    private final LocationListener locationListener = new LocationListener() { 
    public void onLocationChanged(Location location) { 
     updateWithNewLocation(location); 
    } 

    public void onProviderDisabled(String provider){ 
     updateWithNewLocation(null); 
    } 

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

LocationManager.getLastKnownLocation并不能保证它会返回一个有效的位置。如果GPS定位尚未建立,它将返回空值。获得实际位置的唯一可靠方法是使用接口LocationListener。我看到你已经定义了一个LocationListener,但没有使用它。

您需要修改代码,以便在您尝试对该位置执行任何操作之前,等待第一次调用onLocationChanged。

+0

感谢ütuomasR乌拉圭回合的建议,我甚至在尝试也。 – 2010-09-30 09:26:45

+0

现在任何方式我得到的解决方案 – 2010-09-30 09:27:07

1

嗨,我也面临着同样的问题,在2.1后,我决心像这样... 它会为你工作

myManager = ((LocationManager) ApplicationController.getAppContext() 
      .getSystemService(Context.LOCATION_SERVICE)); 

myManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
      1 * 1000, 0.00001f, this); 

按照塔的位置改变ASY方法U将得到LAT /和长

不使用包对象在那里它不会工作,而不是的,你可以使用GPS卫星类2.1至