当类实现LocationListener时是否调用onLocationChanged?

时间:2016-02-17 22:31:11

标签: android

我无法理解为什么在一个Activity中调用onLocationChanged,而在服务中调用它。假设我有服务:

public class LocationService extends Service implements LocationListener{

    @override
    public void onCreate() {
    mLocationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
    mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 0, this);
    }

    @Override
    public void onLocationChanged(Location location) { //it is called
        //do something with location 
    }
}

我有一个活动:

public class ViewActivity extends AppCompatActivity implements OnMapReadyCallback, LocationListener{
    @Override
    public void onLocationChanged(Location location) { //it is not called
        //do something with location 
    }
}

是因为我没有在此活动中请求位置更新吗?如果已经在服务中完成,我为什么要请求它。 另外,我应该如何正确地通过应用程序传播我的位置?

1 个答案:

答案 0 :(得分:0)

如果在您的服务中完成,则意味着您需要从活动中启动该服务。如果您有一个类似于您正在使用的活动而没有要求更新位置的活动,则onLocationChanged将无效。

这是实际调用位置更新的部分

requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 0, this);

我发现您正在尝试在后台使用该服务并在活动中收到更新。您可能的解决方案是从onLocationChanged方法内的服务发送广播,并在活动中接收它。

所以来自您的服务:

@Override
public void onLocationChanged(Location location) {
    Intent intent = new Intent();
    intent.setAction("com.myapp.LOCATION_CHANGED");
    sendBroadcast(intent);
}

和您的活动

@Override
public void onReceive(Context context, Intent intent) {
  // do something
}