onLocationChanged 不是从 IntentService 调用的
onLocationChanged is not called from IntentService
我有一个每 30 分钟触发一次 IntentService 的 AlarmManager,这个 Intent 服务是每次获取用户的位置。我有两种获取位置的方法:首先它检查 getLastKnownLocation(),如果它在最后 2 分钟内它使用它,这部分工作完美。
第二种方法是如果最后一个位置是旧的或returns null,我想在其中获取一次新位置。出于某种原因 这从不调用 onLocationChanged()。 这导致我的 IntentService 大部分时间不返回坐标,如果 getLastKnownLocation() 是最近的,它只会 returns 它们。
这是我的设置代码,为什么如果我想获得一个新的位置,它永远不会被调用?检查代码中的注释以查看调用的内容和从未调用的内容。
LocationListener locationListener;
LocationManager locationManager;
private final double MIN_COORD_DIFF = 0.0006;
public CoordinateAlarmReceiver(){
super("CoordinateAlarmReceiver");
}
@Override
protected void onHandleIntent(Intent intent) {
//THIS IS CALLED CORRECTLY
MyLog.i("coordinate alarm received");
locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location lastLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
//if last location was in past 2 minutes, use that
if(lastLocation != null && lastLocation.getTime() > Calendar.getInstance().getTimeInMillis() - 2 * 60 * 1000) {
//THIS IS CALLED CORRECTLY
storeLocation(lastLocation);
MyLog.i("Last location was recent, using that");
}
else { //otherwise get new location
//THIS IS CALLED CORRECTLY
MyLog.i("Last location was old, getting new location");
locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
//THIS IS NEVER CALLED
MyLog.i("Got new coordinates");
storeLocation(location);
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) {
}
};
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
}
}
您应该使用服务而不是 IntentService。 IntentService 在完成任务时完成,但是该服务是 运行 并且可以侦听位置更改事件。尝试使用服务。
希望对你有帮助!!
我有一个每 30 分钟触发一次 IntentService 的 AlarmManager,这个 Intent 服务是每次获取用户的位置。我有两种获取位置的方法:首先它检查 getLastKnownLocation(),如果它在最后 2 分钟内它使用它,这部分工作完美。
第二种方法是如果最后一个位置是旧的或returns null,我想在其中获取一次新位置。出于某种原因 这从不调用 onLocationChanged()。 这导致我的 IntentService 大部分时间不返回坐标,如果 getLastKnownLocation() 是最近的,它只会 returns 它们。
这是我的设置代码,为什么如果我想获得一个新的位置,它永远不会被调用?检查代码中的注释以查看调用的内容和从未调用的内容。
LocationListener locationListener;
LocationManager locationManager;
private final double MIN_COORD_DIFF = 0.0006;
public CoordinateAlarmReceiver(){
super("CoordinateAlarmReceiver");
}
@Override
protected void onHandleIntent(Intent intent) {
//THIS IS CALLED CORRECTLY
MyLog.i("coordinate alarm received");
locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location lastLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
//if last location was in past 2 minutes, use that
if(lastLocation != null && lastLocation.getTime() > Calendar.getInstance().getTimeInMillis() - 2 * 60 * 1000) {
//THIS IS CALLED CORRECTLY
storeLocation(lastLocation);
MyLog.i("Last location was recent, using that");
}
else { //otherwise get new location
//THIS IS CALLED CORRECTLY
MyLog.i("Last location was old, getting new location");
locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
//THIS IS NEVER CALLED
MyLog.i("Got new coordinates");
storeLocation(location);
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) {
}
};
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
}
}
您应该使用服务而不是 IntentService。 IntentService 在完成任务时完成,但是该服务是 运行 并且可以侦听位置更改事件。尝试使用服务。
希望对你有帮助!!