android getlastknownlocation在模拟器中始终为null

这似乎是一个普遍的问题,但我真的不明白为什么它会发生,即使我读了很多类似的问题。

我在模拟器设备上玩一个基本的位置类,我设置了所有内容 – 权限(FINE和COARSE),我在DDMS中设置了坐标我也尝试使用telnet然后,但无论它总是崩溃与nullpointer与getlastknownlocation一致的例外,这里有什么想法吗?

public class MainActivity extends Activity implements LocationListener { private static LocationManager ok; private Location L; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ok=(LocationManager)this.getSystemService(ok.GPS_PROVIDER); L=ok.getLastKnownLocation(ok.GPS_PROVIDER); } @Override public void onLocationChanged(Location Loc) { try { double latop=Loc.getLatitude(); double longe=Loc.getLongitude(); Log.i("OK", "and"+longe+""+latop); } catch (NullPointerException e) { } } 

如果没有应用程序最近从您想要的提供程序请求了位置修复,则getLastKnownLocation()通常会返回null

在模拟器上,它似乎更进一步:除非已经将一个位置传递到模拟器,否则您不会获得位置,因为您的应用程序已调用requestLocationUpdates()

使用getLastKnownLocation()的一般模式,如果你想得到一个实际Location不错的几率,是使用requestLocationUpdates()removeLocationUpdates()来确保LocationManager通过你选择的提供者积极寻找位置。 当然,如果您愿意,也可以使用LocationListeneronLocationChanged() ,而不是getLastKnownLocation()

还有另一种选择,使用locationManager.addTestProvider()创建自己的提供者; 所以你可以自己做测试。