0

我有这段代码;

 lm = (LocationManager) 
 getSystemService(Context.LOCATION_SERVICE);

 gpslocation = Double.toString(lm.getLastKnownLocation("gps").getLatitude()) +" " 
 + Double.toString(lm.getLastKnownLocation("gps").getLongitude());

这在模拟器和我的运行 android 1.5 的英雄上都可以正常工作,但它在 1.6 的模拟器和我的纹身上强制关闭。

从 1.5 到 1.6 发生了什么变化?

好的,改用这个;

    lm = (LocationManager) 
    getSystemService(Context.LOCATION_SERVICE);

    Double latPoint = null;
    Double lngPoint = null;

    Location loc = lm.getLastKnownLocation("gps");
    if(loc != null) {
       latPoint = lm.getLastKnownLocation("gps").getLatitude();
       lngPoint = lm.getLastKnownLocation("gps").getLongitude();

    } else {

    }

  Toast.makeText(getBaseContext(),"test lat " + latPoint, Toast.LENGTH_LONG).show();

如果我在运行应用程序之前在模拟器上触发一个位置,我会得到空吐司和空吐司。

4

1 回答 1

2

通常,使用adb logcat、DDMS 或 Eclipse 中的 DDMS 透视图来查看与“强制关闭”对话框相关的 Java 堆栈跟踪,以了解问题所在。

特别是在您的情况下,它不起作用,因为您没有在代码片段中打开 GPS。

getLastKnownLocation()除非该提供程序已启动并运行,否则您无法可靠地调用该提供程序。在您的情况下,GPS 可能没有运行,并且getLastKnownLocation()会返回null

您需要注册位置更新或接近警报,才能打开 GPS 无线电并寻求修复,然后getLastKnownLocation()才能工作。此外,使用模拟器,您需要在注册位置更新后提交修复(例如,通过 DDMS),否则getLastKnownLocation()将返回非null值。

于 2010-03-06T20:39:00.133 回答