критерии для GPS и сети - PullRequest
       6

критерии для GPS и сети

3 голосов
/ 17 декабря 2010

Я хотел бы знать, как я могу получить информацию о местоположении от лучшего поставщика
нужно ли мне сделать два отдельных критерия 1 для GPS и 1 для сети или есть способ соединить их все вместе?
это мой код, когда я добавляю критерии COARSE, GPS не включается (без вспыхивающего логотипа GPS в верхней части экрана), и когда я использую критерии FINE, я ничего не получаю из сети .......Так мне нужно написать критерии для обоих и переключаться между ними для того, что когда-либо доступно, или они оба могут быть в тех же критериях?в моем коде, поэтому он должен получить местоположение от лучшего поставщика .... правильно .. ??!

Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
//// criteria.setAccuracy(Criteria.ACCURACY_COARSE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_HIGH);
String provider = locationManager.getBestProvider(criteria, true);

Ответы [ 2 ]

1 голос
/ 20 декабря 2012

Использование getBestProvider с Criteria.ACCURACY_FINE никогда не вернет NETWORK_PROVIDER, хотя позиция Wi-Fi обычно довольно точная.

В моем приложении я использую getProviders, чтобы получить все провайдеров, соответствующих моим критериям, затем добавьте NETWORK_PROVIDER, если он активирован и еще не в списке.

Затем я запускаю requestLocationUpdates для каждого из этих провайдеров, обязательно позвонив по номеру removeUpdates, когда получу точное местоположение.

Таким образом, если местоположение, предоставленное сетью, является достаточно точным, провайдер GPS будет отключен

0 голосов
/ 26 января 2015

@ nicopico getBestProvider с Criteria.ACCURACY_FINE может вернуть NETWORK_PROVIDER, если gps не включен я использую следующий код в моем приложении

public void getLocation() {
        // Getting Google Play availability status
        int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(context);

//        boolean network_enabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

        // Showing status
        if (status != ConnectionResult.SUCCESS) { // Google Play Services are not available
            Log.e(TAG, "getLocation fired Google Play Services are not available");

           mHandler.post(new UiToastCommunicaton(context.getApplicationContext(),
                   context.getResources().getString(R.string.gpserv_notfound)));
        }

        // Getting LocationManager object from System Service LOCATION_SERVICE
        locationManager = (LocationManager) context.getSystemService(IntentService.LOCATION_SERVICE);
        if (!locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {//check if network location provider context on
            Log.e(TAG, "network location provider not enabled");
        } else {
            criteria = new Criteria();
            criteria.setAccuracy(Criteria.ACCURACY_FINE);
            criteria.setAltitudeRequired(false);
            criteria.setBearingRequired(false);
            criteria.setCostAllowed(true);
            //criteria.setPowerRequirement(Criteria.POWER_LOW);
            // Getting the name of the best provider
            provider = locationManager.getBestProvider(criteria, true);

            // Check provider exists then request for location
            if (provider != null) {
                requestLocation(locationManager, provider);
            } else {
                //start wifi, gps, or tell user to do so
            }

        }
    }
public void requestLocation(LocationManager locationManager, String provider) {
Log.e(TAG, "requestLocation fired getting location now");

if (provider != null) {

    locationManager.requestLocationUpdates(provider, 0, 0, this);
    //locationManager.requestLocationUpdates(provider, 0, 0, this, Looper.getMainLooper());
} else {
    //tell user what has happened
}
}

этот код находится в классе, который реализует locationListener Вы можете редактировать эту строку

locationManager.requestLocationUpdates(provider, 0, 0, this);

чтобы отразить вашу реализацию locationListener

...