2010-05-27 8 views
13

Ich habe diesen Code, die besten verfügbaren Anbieterandroid get Lage von besten Anbietern verfügbar

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

locationListener = new MyLocationListener(); 
Criteria criteria = new Criteria(); 
criteria.setAccuracy(Criteria.ACCURACY_FINE); 
String provider = lm.getBestProvider(criteria, true); 
Location mostRecentLocation = lm.getLastKnownLocation(provider); 
if(mostRecentLocation != null) { 
    latid=mostRecentLocation.getLatitude(); 
    longid=mostRecentLocation.getLongitude(); 
} 
lm.requestLocationUpdates(provider, 1, 0, locationListener); 

und dann den Hörer

private class MyLocationListener implements LocationListener { 

@Override 
public void onLocationChanged(Location loc) { 
    if (loc != null) { 
    latid = loc.getLatitude(); 
    longid = loc.getLongitude(); 
    // if(loc.hasAccuracy()==true){ 
    accuracyd = loc.getAccuracy(); 
    String providershown = loc.getProvider();  
    accuracy.setText("Location Acquired. Accuracy:" 
     + Double.toString(accuracyd) + "m\nProvider: "+providershown); 
    accuracy.setBackgroundColor(Color.GREEN); 
    // } 
    userinfo=usernamevalue+"&"+Double.toString(latid)+"&"+Double.toString(longid); 
    submituserlocation(userinfo); 
    } 
} 

Wenn ich es mit einem Gerät getestet zu bekommen (htc Magie) I herausgefunden, dass wenn GPS deaktiviert ist, es sofort aus dem Netzwerk sperrt. Wenn ich das gps aktiviere, nimmt es keine Daten vom Netz und wartet, bis es vom gps blockiert.
Ich möchte die Position wie die Google Maps sperren, bis sie ein gutes GPS-Signal haben, verwenden sie das Netzwerk, um meinen Standort zu bestimmen.
Ich würde zwar die besten Kriterien tun, aber was sie tun, ist einen Anbieter einmal auszuwählen.
Ist etwas mit meinem Code nicht in Ordnung oder muss ich Threads und Timeouts machen, um das zu ermöglichen?

+0

spagi Code mir sehr geholfen - nirgendwo auf der Android Entwickler-Website ist es zu erklären, wie der bestmöglichen Anbieter zu bekommen. Einige Geräte können GPS, einige GSM, einige WLAN haben. –

+0

Hier ist ein sehr interessanter Google-Artikel: http://developer.android.com/training/basics/location/currentlocation.html – shkschneider

Antwort

14

Vielleicht können Sie versuchen, sowohl den Netzwerkanbieter und GPS-Anbieter für eine gewisse Zeit zu hören und dann überprüfen Sie die Ergebnisse der beiden. Wenn Sie keine Ergebnisse vom GPS haben, verwenden Sie stattdessen die Netzwerkergebnisse. So habe ich es gemacht.

+0

Also mache ich 2 Location Listener, einen für Gps und einen für das Netzwerk und initialisieren sie beide mit requestLocationUpdates. Ich kann ihnen beide dann mit einem onLocationChanged zuhören? – spagi

+0

Ja, Sie sollten auf beide hören. Sie können sogar lastKnownLocation verwenden, bevor das Update von einem beliebigen Anbieter kommt. – Fedor

+1

Sie können in Ihrem MyLocationListener eine Location-Variable hinzufügen und ihren Wert in onLocationChanged() festlegen. Erstellen Sie in Ihrer Hauptaktivität zwei Instanzen von MylocationListener, eine für die gps und eine für den Netzwerkanbieter. Hören Sie sich beide ab einer bestimmten Zeit an (Sie könnten dies durch Erstellen eines Timer-Threads implementieren) und hören Sie nach Ablauf der Zeit auf, zuzuhören und überprüfen Sie zuerst die Standortvariable im gpslistener, falls es welche gibt, andernfalls überprüfen Sie den Networklistener. – capecrawler

3

Vielleicht können Sie getBestProvider (Criteria criteria, boolean enabledOnly) von LocationManager mit Kriterien wie in this other thread verwenden. Siehe official documentation.

Hoffen, es hilft

Verwandte Themen