我在做一个定位的服务,需要每隔1分钟将当前所在的位置发送到服务器上,我原先的做法只使用了GPS_PROVIDER,然后在listener的onLocationChanged中,用了个异步发送信息到服务器,一般情况下,只需要使用GPS信息就行,但是有时候在室内GPS不可用时,需要使用其它的定位方式,像Google Map一样,当手机的GPS定位不可用时会采用另外一种方式定位(虽然有时候误差比较大)
我在网上看到一段代码,是给每个provider都增加了一个listener,public boolean testProviders() {
    Log.e(LOG_TAG, "testProviders");
    String location_context = Context.LOCATION_SERVICE;
    locationmanager = (LocationManager) getSystemService(location_context);
    List<String> providers = locationmanager.getProviders(true);
    for (String provider : providers) {
        Log.e(LOG_TAG, "registering provider " + provider);
        listener = new LocationListener() {
            public void onLocationChanged(Location location) {
                // keep checking the location - until we have
                // what we need
                //if (!checkLoc(location)) {
                Log.e(LOG_TAG, "onLocationChanged");
                locationDetermined = checkLoc(location);
                //}
            }
            public void onProviderDisabled(String provider) {
            }
            public void onProviderEnabled(String provider) {
            }
            public void onStatusChanged(String provider, int status,
                    Bundle extras) {
            }
        };
        locationmanager.requestLocationUpdates(provider, 0,
                0, listener);//设置成1分钟
    }
    Log.e(LOG_TAG, "getting updates");
    return true;
}
现在的问题是有多个listener,每一个listener都是独立的,在onLocationChanged里面上传数据的方法不太适合。我的想法是,用一个List来存储这些信息,每个listener往list里面增加信息,然后用一个线程1分钟检查list一次,取里面最精确的值上传。但是我总感觉这个方法代价有点大,是否真的有必要监听每一个设备,不知道有没有更简便的方法,求助于各位。