2010-09-29 93 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至