2012-09-22 61 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。

其他遇到此问题的人 - 尝试从互联网上取得工作代码并逐步比较,直到它在您的应用程序中运行。