我正试图通过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" />
所以我真的不知道我的代码有什么问题。
感谢您的时间!!
答案 0 :(得分:3)
getLastKnownLocation()
返回最后一个缓存位置。如果没有这样的位置将返回null(例如,如果电话关闭)如果提供者当前被禁用,则返回null
获取GPS定位需要时间。只有在获得适当的修复后才会调用onLocationChanged()
,此时间可能介于20秒到几分钟之间。
只有在onLocationChanged()
被调用至少一次后,getLastKnownLocation()
才会返回最后一个有效位置。
答案 1 :(得分:1)
您是在模拟器或物理设备上运行应用程序/代码吗?如果它是一个模拟器并且您之前从未设置过该位置(在eclipse中使用DDMS视图),则该位置将为null。
希望这会有所帮助。
答案 2 :(得分:0)
根据getLastKnownLocation的文档:
如果当前禁用了提供程序,则返回null。
因此,如果你在设备上没有启用GPS,那么你将会测试它。如果您使用的是Android模拟器,请参阅此stackoverflow post以了解如何模拟特定位置。