我无法理解为什么在一个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
}
}
是因为我没有在此活动中请求位置更新吗?如果已经在服务中完成,我为什么要请求它。 另外,我应该如何正确地通过应用程序传播我的位置?
答案 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
}