我在Android应用程序上获取当前位置的错误是什么?

时间:2011-10-20 03:43:58

标签: java android gps location

我正试图通过GPS获取我当前的位置,但似乎没有任何效果,我在这里跟了很多问题,但收效甚微......

这是我的代码:

private GeoPoint getActualPosition()
{
    LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);

    Location current = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);

    actualLat = (int)(current.getLatitude()*1E6);
    actualLong = (int)(current.getLongitude()*1E6);

    GeoPoint point = new GeoPoint(actualLat, actualLong);

    return point;
}

现在,方法的“this”部分(在requestLocationUpdates上)引用了实现LocationListener接口的活动,其onLocationChanged方法是:

@Override
public void onLocationChanged(Location location) {
    actualLat = (int)(location.getLatitude()*1E6);
    actualLong = (int)(location.getLongitude()*1E6);

}

我的问题出现在当前的位置行,其中“当前”始终为空,总是为空,我找不到原因。

我的清单拥有所需的权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

所以我真的不知道我的代码有什么问题。

感谢您的时间!!

3 个答案:

答案 0 :(得分:3)

getLastKnownLocation()返回最后一个缓存位置。如果没有这样的位置将返回null(例如,如果电话关闭)如果提供者当前被禁用,则返回null

获取GPS定位需要时间。只有在获得适当的修复后才会调用onLocationChanged(),此时间可能介于20秒到几分钟之间。

只有在onLocationChanged()被调用至少一次后,getLastKnownLocation()才会返回最后一个有效位置。

答案 1 :(得分:1)

您是在模拟器或物理设备上运行应用程序/代码吗?如果它是一个模拟器并且您之前从未设置过该位置(在eclipse中使用DDMS视图),则该位置将为null。

希望这会有所帮助。

答案 2 :(得分:0)

根据getLastKnownLocation的文档:

  

如果当前禁用了提供程序,则返回null。

因此,如果你在设备上没有启用GPS,那么你将会测试它。如果您使用的是Android模拟器,请参阅此stackoverflow post以了解如何模拟特定位置。