2013-07-17 64 views
0

這是我在連接locationClient後調用的onConnected()方法。這種方法稱爲OK,所以GPS連接正常。但是,getLastLocation()返回null,可能會因爲嘗試立即獲取某個位置而預期,並且根本沒有調用locationListener方法。 它正在三星Galaxy S3上運行。當我打開谷歌地圖應用程序,它立即得到我的位置的修復,所以GPS一定很好。Android locationClient返回null,位置更新無響應

@Override 
public void onConnected(Bundle arg0) 
{ 

    Toast.makeText(context, "GPS connected", Toast.LENGTH_SHORT).show(); 
    connector = new Connector(); 
    connector.execute("clues", null, null); 
    listener = new LocationListener() 
    { 
     @Override 
     public void onLocationChanged(Location location) 
     { 
      Log.d("location", "listener activated"); 
      try 
      { 
      coords = locationCoords(location); 
      if(coords[0] != 0) 
      { 
       meMarker = map.addMarker(new MarkerOptions() 
       .position(new LatLng(coords[0], coords[1])) 
       .title("Me") 
       .snippet("Your position") 
       .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))); 
       map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(coords[0], coords[1]), (float) 19)); 
      } 
      Toast.makeText(context, coords[0] + ", " + coords[1], Toast.LENGTH_LONG).show(); 
      } 
      catch(NullPointerException e) 
      { 
       Log.d("nulls", "null"); 
      } 

     } 
    }; 
    mLocationClient.requestLocationUpdates(mLocationRequest, listener); 
    try 
    { 
    coords = locationCoords(new Location(mLocationClient.getLastLocation())); 
    map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(coords[0], coords[1]), (float) 19)); 
    } 
    catch(NullPointerException e) 
    { 
     Toast.makeText(context,"location null", Toast.LENGTH_LONG).show(); 
    } 
    //Toast.makeText(context, coords[0] + ", " + coords[1], Toast.LENGTH_LONG).show(); 
    Log.d("location", "location updates initiated"); 
} 

定義請求參數:

public dbConnector(Context con, Activity acti, GoogleMap map) 
{ 
    context = con; 
    activity = acti; 
    mLocationRequest = LocationRequest.create(); 
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    setGPSUpdates(10000, 5000); 
    mLocationRequest.setInterval(updateRate); 
    mLocationRequest.setFastestInterval(fastestUpdate); 
    mLocationRequest.setSmallestDisplacement(1); 
    Log.d("location", "location request constructed"); 
    this.map = map; 


} 

public void setGPSUpdates(int update, int fastupdate) 
{ 
    updateRate = update; 
    fastestUpdate = fastupdate; 
} 
+0

設置優先級和最快的時間間隔來請求位置更新之前。我沒有看到你在哪裏做 – tyczj

+0

我在別處做。 – fonduman

回答

0

的谷歌地圖應用同時使用GPS和網絡定位。

使用GPS,第一次修復需要一段時間才能到達是正常現象。此外,它在外面運作良好,內部非常糟糕。 (另外,確保啓用GPS)

此代碼的工作對我來說:

public class MainActivity extends Activity implements LocationListener { 

    private LocationManager locationManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
      // GPS is disabled 
     } 

    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 
       0, this); 
    } 

    @Override 
    protected void onStop() { 
     locationManager.removeUpdates(this); 
     super.onStop(); 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     // do something with the fix 
    } 

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

    @Override 
    public void onProviderEnabled(String provider) { 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
    } 
} 
+0

等了10分鐘,沒有修復。走出去,沒有修復。打開谷歌地圖,即時修復。這不是GPS本身的問題,一定是錯誤的...... – fonduman

+0

我正在使用google API。它實際上在5天前工作,然後有一天它決定停止工作。我可能會嘗試切換到更傳統的位置服務系統。 – fonduman

+0

@fonduman那麼你在這5天內改變了什麼?如果你沒有改變任何東西,那麼你的代碼可能沒有任何問題。你嘗試重新啓動設備嗎? – tyczj