ReminderLogic服务类调用GPSTracker服务类。 isGPSEnabled是真的。 GPS在设备中亮起,显然在天空视野下。 lat和long仍为0.0。
location = locationManager
.getLastKnownLocation(Context.LOCATION_SERVICE);
和
location = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
将位置设为null。
有人可以帮助我。
// ReminderLogic服务类
GPSTracker gps;
double CurrLatitude, CurrLongitude;
Location CurrentLoc;
gps = new GPSTracker(HomePageActivity.this);
if (gps.canGetLocation()) {
CurrLatitude = gps.getLatitude();
CurrLongitude = gps.getLongitude();
Toast.makeText(
getApplicationContext(),
"canGetLocation is True. CurrLatitude and CurrLongitude is "
+ CurrLatitude + CurrLongitude, Toast.LENGTH_LONG)
.show();
}
// GPS追踪服务类
if (isGPSEnabled) {
this.canGetLocation = true;
if (location == null) {
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 0, 0, this);
Log.d("GPS Enabled", "GPS Enabled");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(Context.LOCATION_SERVICE);
location = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
}
答案 0 :(得分:1)
尝试覆盖 onLocationChanges(位置位置)
@Override
public void onLocationChanged(Location location) {
if (location != null)
{
Log.i("SuperMap", "Location changed : Lat: " + location.getLatitude() + " Lng: " + location.getLongitude());
latitude = location.getLatitude();
longitude = location.getLongitude();
Log.i("latitude,longitude", ""+latitude+","+longitude);
}
}
答案 1 :(得分:1)
首先,我将向您解释为什么您的代码无效。
您正在使用GPS获取位置,这需要一些时间来获取您的位置并获取位置触发onLocationChanged
听众。
但是,在您的代码中,您要求GPS使用
获取您的位置locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 0, 0, this);
然后期望它能在一秒钟内为您提供位置。当GPS跟踪您时,您需要LocationListener
来收听该位置。这可能需要20分钟,取决于GPS是否可以直接访问卫星,例如。如果您的设备位于建筑物内,GPS将需要几分钟才能跟踪您,但如果您打开GPS,则会快速跟踪您。
要使用LocationListener
,只需在您的班级声明中添加implements LocationListener
即可。然后在onLocationChanged()中使用以下内容获取您的位置。
@Override
public void onLocationChanged(Location location) {
if (location != null)
{
Log.d("Location Found", location.getLatitude() + " " + location.getLongitude());
locationManager.removeUpdates(this);
}
}
locationManager.removeUpdates(this);
阻止android无休止地向你发送位置,这很重要。
此外,您可以使用
在内部LocationListener
类
LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
Log.d("Location Found", location.getLatitude() + " " + location.getLongitude());
locationManager.removeUpdates(this);
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
}
}
但你必须像这样更新requestLocationUpdates()
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 0, 0, locationListener);
更新: -
您正在检查locationManager
之后requestLocationUpdates()
是否为空,但在您初始化之后它不会为空。然后你正在使用
location = locationManager
.getLastKnownLocation(Context.LOCATION_SERVICE);
获取最后一个已知位置,只有在您之前使用任何应用获取位置时才会出现该位置。例如。如果您使用Google地图应用获取您的位置,那么在Google地图检测到您的位置后,您打开自己的应用,那么您将获得 LastKnownLocation 。这是因为android拥有你过去的位置。
如果您以前从未获得任何位置,那么您将无法获得任何结果。此外,这是错误的编码方式。你应该这样做
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
else{
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 0, 0, this);
}
这样,如果你有一个以前的位置,你可以使用它,如果没有,那么你得到一个新位置。
答案 2 :(得分:0)
将您的代码更改为:
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (locationManager != null) {
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
希望这有帮助。