YourService
当位置改变时通知每个注册的LocationOperator
。 LocationOperator
是一个简单的界面,声明operate(Location)
方法。
class YourService extends Service implements LocationListener {
private List<LocationOperator> listeners = new ArrayList<LocationOperator>();
public List<LocationOperator> getListeners() {
return listeners;
}
@Override
public void onLocationChanged(Location location) {
for (LocationOperator listener : listeners) {
listener.operate(location);
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// request location updates from `LOCATION_SERVICE`
return Service.START_NOT_STICKY;
}
//...
}
启动并连接到这个服务从您的主要活动
public class MainActivity extends Activity {
static YourService yourService;
@Override
protected void onCreate(Bundle savedInstanceState) {
//...
Intent service = new Intent(this, YourService.class);
startService(service);
bindService();
}
// ...
}
然后你就可以在MainActivity
达到这个服务并注册Location
public class OperatorActivity extends Activity implements LocationOperator {
@Override
public void onCreate(Bundle instance) {
// ...
MainActivity.yourService.getListeners().add(this);
// ...
}
public void operate(Location location) {
// use location
}
}
你为什么不打电话给你的网站你的'LocationService'的'onLocationChanged'方法中的服务操作?如果它是一个冗长的操作,你总是可以把它包装在'AsyncTask'中。 – Akdeniz
hmmm因为LocationService仅用于通过GlobalVars跟踪用户的当前位置。然后,我将调用不同的Web服务,具体取决于用户所在的屏幕,并从GlobalVars的最新位置发送。 – chongzixin
因此,如何在每个活动开始时将处理Web服务操作的监听器注册到'LocationService'。 – Akdeniz