2010-12-17 7 views
2

Ich würde gerne wissen, wie bekomme ich Lage vom besten Anbieter
muss ich zwei separate Kriterien 1 für das GPS und 1 für das Netzwerk oder gibt es eine Möglichkeit, sie zu setzen alle zusammen ?
Dies ist mein Code, wenn ich die COARSE-Kriterien hinzufüge, die GPS nicht geht (kein GPS-Logo oben auf dem Bildschirm blinkt) und wenn ich die FINE-Kriterien verwende, bekomme ich nichts aus dem Netzwerk ..... ..so muss ich Kriterien für beide schreiben und zwischen ihnen wechseln, je nachdem was verfügbar ist, oder können beide Kriterien übereinstimmen?
weil ich den "GetBestProvider (Kriterien, wahr) habe;" in meinem code sollte es also die location vom besten provider bekommen .... richtig .. ??!Kriterien für GPS und Netzwerk

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); 
+0

widerspiegeln Wieso rufen Sie sogar 'setAccuracy()', da Sie offensichtlich bereit sind, jede Genauigkeit zu akzeptieren? – CommonsWare

+0

Ich möchte die Genauigkeit, aber an einigen Orten wie in Tunneln oder in der Nähe von hohen Gebäuden ist der einzige Ort, den Sie erreichen können, von einem Netzwerk ... – moe

Antwort

1

ein getBestProvider mit Criteria.ACCURACY_FINE Verwendung wird nie die NETWORK_PROVIDER zurückkehren, obwohl WiFi Position in der Regel ganz genau ist.

In meiner Anwendung verwende ich getProvidersalle Anbieter bekommen meine Kriterien übereinstimmen, dann die NETWORK_PROVIDER hinzufügen, wenn es und noch nicht in der Liste aktiviert ist.

Dann starte ich eine requestLocationUpdates für jeden dieser Anbieter, stellen Sie sicher, removeUpdates aufrufen, wenn ich einen Ort genau genug bekomme.

Auf diese Weise, wenn die Lage durch das Netz bereitgestellt genau genug ist, wird der GPS-Anbieter ausgeschaltet

mit Criteria.ACCURACY_FINE
0

@nicopico getBestProvider werden kann, die NETWORK_PROVIDER zurück, wenn GPS nicht i aktiviert wird die folgende Code in meiner app

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 
} 
} 

dieser Code in einer Klasse, die Location implementiert Sie diese Zeile

locationManager.requestLocationUpdates(provider, 0, 0, this); 
bearbeiten können

um Ihre Implementierung von locationListener