IntentService 不会等待您的 onLocationChangedListener ,如果您的 IntentService 的最后一部分是取消注册您的位置更改侦听器,那么这就是您的问题。
您可以做的是将您的 IntentService 转换为常规服务。检查不同的操作,其中一个是您收到新位置时的下一步。
IE
private class MyLocationListener implements LocationListener {
public void onLocationChanged(Location location) {
Intent intent = new Intent(this,MyService.class);
intent.setAction("LOCATION_RECEIVED");
intent.putExtra("locationUpdate",location);
locationManager.removeUpdates(this);
this.startService(intent);
}
public void onStatusChanged(String s, int i, Bundle bundle) {}
public void onProviderEnabled(String s) {}
public void onProviderDisabled(String s) {}
}
并在您的服务上...
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent!=null) {
String action = intent.getAction();
if (action!= null) {
if (action.equals("LOCATION_RECEIVED")) {
Location location = null;
if (intent.hasExtra("locationUpdate")) {
location = intent.getExtras().getParcelable("locationUpdate");
//Process new location updates here
}
另一种方法是在 LocationListener 上使用 Pending 意图,但它的效果与上面的代码相同。第三种方法是从 OnLocationChangedListener 向您的 IntentService 发布一个可运行的(我个人没有尝试过这个。)
如果您可以在这里分享一些代码,将不胜感激。如果您还有其他问题。当我正在从事类似的项目时,我可能会有所帮助,从服务获取位置。