0

这段代码:

ServiceListener mlistener = new SosServiceListener(getApplicationContext());

manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

manager.requestSingleUpdate(LocationManager.GPS_PROVIDER, mlistener, null);
manager.requestSingleUpdate(LocationManager.NETWORK_PROVIDER, mlistener, null);

将侦听器一次附加到两个事件。事实是:如果两个事件都被触发,监听器会被调用两次?如果是,您将如何预防?

谢谢!

4

2 回答 2

2

这是我在我的一个项目中使用的并且运行良好:

public Location getLocation() {
        try {
            mLocationManager = (LocationManager) context.getSystemService(LOCATION_SERVICE);

            // getting GPS status
            boolean isGPSEnabled = mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

            // getting network status
            boolean isNetworkEnabled = mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

            if (!isGPSEnabled && !isNetworkEnabled) {
                // no network provider is enabled
            } else {
                // First get location from Network Provider
                if (isNetworkEnabled) {
                    mLocationManager.requestLocationUpdates( LocationManager.NETWORK_PROVIDER,  MIN_TIME_BW_UPDATES,  MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                    Log.d("Network", "Network");
                    if (mLocationManager != null) {
                        location = mLocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                        if (location != null) {
                            lat = location.getLatitude();
                            lng = location.getLongitude();
                        }
                    }
                }
                //get the location by gps
                if (isGPSEnabled) {
                    if (location == null) {
                        mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,MIN_TIME_BW_UPDATES,MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                        Log.d("GPS Enabled", "GPS Enabled");
                        if (mLocationManager != null) {location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                            if (location != null) {
                                lat = location.getLatitude();
                                lng = location.getLongitude();
                            }
                        }
                    }
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return location;
    }
于 2013-09-24T11:20:53.927 回答
0

如果您可以假设设备将在安装了 Google Play 的设备上运行 - 更好的方法是使用此服务:https ://developer.android.com/training/location/retrieve-current.html

于 2013-09-24T11:17:40.077 回答