我的服务中有以下代码:
LocationManager locationManager =
(LocationManager) getSystemService(Context.LOCATION_SERVICE);
String provider =
locationManager.getProvider(LocationManager.GPS_PROVIDER).getName();
Location location = locationManager.getLastKnownLocation(provider);
while(true)
{
if(...)//every 5 seconds it gets into
{
....//control if the location is not null
lat = location.getLatitude();
lon = location.getLongitude();
alt = location.getAltitude();
Log.i(TAG, "Latitude: "+lat+"\nLongitude: "+lon+"\nAltitude: "+alt);
}
else {
Log.i(TAG, "Error!");
}
}
此代码在我的模拟器中有效(GPS已插入Log
),但在我的移动设备中,此代码会转到else
分支。有人能告诉我问题出在哪里?在我的代码或移动设备中?提前谢谢。
P.S。:GPS已打开,在其他应用程序中运行。
答案 0 :(得分:1)
getLastKnownLocation()
无法从GPS提供商处获取后续位置。它将返回(如名称所示)某些代码请求的最后一个已知位置。我假设您在条件中检查位置不是null
,这在您的代码中未显示。如果设备通过其他方式“确定”最后一个已知位置太旧或不可靠,则该位置为空。您需要请求位置更新并提供位置监听器以重复获取位置。
有很多教程可供使用。 Here是一个。他们。