我需要获取Android设备的位置。但是它有一些问题:getLastKnownLocation()
返回null值。自定义LocationListener
中可能存在问题,但我不知道如何修复它。有人可以帮帮我吗?
这是我的代码:
MainActivity:
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
private Pair <String, String> getLocation()
{
Pair< String, String > result = Pair.create("null", "null");
GeoLocatorListener geoLocatorListener = new GeoLocatorListener();
Location currentLocation;
Boolean isGpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
Boolean isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if ( !isGpsEnabled && !isNetworkEnabled )
return result;
long minWaitTime = 1000 * 10; // 10 minutes
float minDistance = 100; // 100 metres
if ( isGpsEnabled )
{
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minWaitTime, minDistance, geoLocatorListener);
currentLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}
else
{
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, minWaitTime, minDistance, geoLocatorListener);
currentLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
}
if ( currentLocation != null )
return Pair.create(String.valueOf(currentLocation.getAltitude()),String.valueOf(currentLocation.getLongitude()));
return result;
}
自定义LocationListener
课程 - GeoLocatorListener
public class GeoLocatorListener implements LocationListener {
@Override
public void onLocationChanged(Location location) {}
@Override
public void onProviderDisabled(String provider) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
}
答案 0 :(得分:0)
基本上当你要求 lastKnownLocation()时,你可以找回一个位置或null。您需要检查的另一件事是您的位置已更新,因为它可能已经过时了。
我想/假设您正在开发一个可以在安装了Google Play的设备上运行的应用程序(+ GooglePlay服务),因此我建议您查看fused location。
通过这种方式,您可以委托并利用GooglePlay服务来检索您的位置,从而消除您在使用基于位置的应用时产生的所有算法和问题。