2012-09-22 96 views
0

我想在地圖上顯示我在哪裏。 我在以色列,它表明我在埃及。 我試着實現不同職位的所有建議,並且幫助我解決了我的問題。android - GPS不準確

  • 我打開了GPS。
  • 我已連接到Internet。
  • 當我啓動MAPS默認Android應用程序時,它顯示我的真實位置!

清單的權限:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.SEND_SMS" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<uses-permission android:name="android.permission.VIBRATE"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> 
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 

我還使用用途庫機器人:名字= 「com.google.android.maps」。

這是延伸LocationListener的的MapActivity相關代碼:

 lm = (LocationManager) getSystemService(LOCATION_SERVICE); 
    boolean enabled = lm 
     .isProviderEnabled(LocationManager.GPS_PROVIDER); 

    // Check if enabled and if not send user to the GSP settings 
    // Better solution would be to display a dialog and suggesting to 
    // go to the settings 
    if (!enabled) { 
     Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
     startActivity(intent); 
    } 


    if(came_from.matches("FollowLocation")) 
    { 
     Location location; 
     Criteria criteria = new Criteria(); 
     criteria.setAccuracy(Criteria.ACCURACY_FINE); 
     String providerName = lm.getBestProvider(criteria, true); 
     // If no suitable provider is found, null is returned. 
     if (providerName == null) 
     { 
      // reflecting changes if distance travel by 
      // user is greater than 20m from current location 
      // and every 1 minute 
      lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 
      location=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
     } 
     else 
     { 
      // reflecting changes if distance travel by 
      // user is greater than 20m from current location 
      // and every 1 minute 
      lm.requestLocationUpdates(providerName, 1*60*1000, 20, this); 
      location=lm.getLastKnownLocation(providerName); 
     }  


     gMapView = (MapView) findViewById(R.id.myGMap); 
     gMapView.setStreetView(true); 
     mc = gMapView.getController(); 
     if (location != null) 
     { 
      lat = location.getLatitude(); 
      lng = location.getLongitude(); 
      mc.setZoom(14); 
     } 
     else //in case we didn't get the location yet 
     { 
      lat = 32.08; 
      lng = 35.84; 
      mc.setZoom(9); 
     } 

     p = new GeoPoint((int) lat * 1000000, (int) lng * 1000000); 
     mc.animateTo(p); 

     // Adding zoom controls to Map 
     gMapView.setBuiltInZoomControls(true); 

     // Add a location mark 
     MyLocationOverlay myLocationOverlay = new MyLocationOverlay(); 
     List<Overlay> list = gMapView.getOverlays(); 
     list.add(myLocationOverlay); 



    } 

} 

/* This method is called when use position will get changed */ 
public void onLocationChanged(Location location) { 
    if (location != null) { 
     double lat = location.getLatitude(); 
     double lng = location.getLongitude(); 
     p = new GeoPoint((int) lat * 1000000, (int) lng * 1000000); 
     mc.animateTo(p); 
    } 
} 




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 
} 

protected boolean isRouteDisplayed() { 
    return false; 
} 

這些座標:北緯32.08 = =液化天然氣35.84在以色列一些現貨... 所以.....我是什麼做錯了?或者我做錯了什麼? :P

謝謝!

+0

你沒有使用iPhone 5嗎? – Simon

+0

Galaxy2! @Simon –

+1

對不起,我可憐的幽默嘗試...我只是在開玩笑.. – Simon

回答

0

我想說getLastKnownLocation由於某種原因給你錯誤的位置。您的默認值32.08,35.84將永遠不會達到,因爲位置永遠不會爲空。我建議使用調試器來查看哪些調用getLastKnownLocation的命中,以及返回的值是什麼。

+0

返回的價值不是我在哪裏。這是因爲onLocationChanged最後一次返回了錯誤的值。我也嘗試從以色列的另一個地方申請申請,並將我置於海中不同的地方! –

0

我拿走了我的代碼,並將它與來自互聯網示例的工作代碼進行了比較。 不知道什麼解決了這個問題,但我確定知道你應該在完成配置一切後請求LocationUpdates。

其他遇到此問題的人 - 嘗試從互聯網上取得工作代碼並逐步比較,直到它在您的應用程序中運行。