ich ein relativ ähnliches Problem mit einer GPS-RPG hatte ich arbeite und hier sind einige Dinge, die ich bemerkte:
Erstens ist es eine Weile für Ihren Standort nehmen zunächst gefunden werden, was dazu führen würde, dieses Problem, da Sie nur überprüfen, ob der Standort null ist.
Sie auch sicher, dass tatsächlich vor etwas zu tun aktiviert sind die Ortungsdienste des Geräts machen wollen kann:
private boolean doLocationsCheck(){
if(!checkLocationEnabled()){
final CharSequence[] items = {"Yes", "No"};
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setCancelable(false);
builder.setTitle("Location must be enabled to play this game! Would you like to enable it now?");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
final int i = item;
runOnUiThread(new Runnable() {
public void run() {
if(i == 0){
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
quit();
}
else{
quit();
}
}
});
}
}).show();
AlertDialog alert = builder.create();
return false;
}
else {
return true;
}
}
private boolean checkLocationEnabled(){
LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
boolean enabled = service.isProviderEnabled(LocationManager.GPS_PROVIDER) || service.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
return enabled;
}
Nachdem ich sicher gemacht haben die Anbieter zur Verfügung ich Setup sind eine Verbindung wie folgt:
private void setupLocation() {
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(final Location location) {
runOnUiThread(new Runnable() {
public void run() {
mLocation = location;
//Log.d(TAG, "Latitude: " + location.getLatitude() + " - Longitude: " + location.getLongitude());
saveLocation();
}
});
}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
//Can set to GPS or network, whichever is available
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
}
Der Speicherort wird dann bei jeder Aktualisierung in einer globalen Variablen gespeichert und dann in den Voreinstellungen gespeichert. Auf diese Weise kann der Benutzer die Anwendung mit dem letzten bekannten Standort, den die App gespeichert hat, weiterhin verwenden, wenn die Anbieter zwar aktiviert sind, aber einige Zeit benötigen, um den Standort abzurufen (gilt nicht für das erste Mal, wenn das Programm ausgeführt wird) es läuft).
Ich weiß, ich habe dort viel weggelassen, aber ich dachte, dass es nicht wirklich notwendig war, da es entweder selbsterklärend war oder bereits in einer vorherigen Antwort erklärt wurde.
Cheers ~
Vielleicht ist Ihre Google-Suche nicht fertig zu dem Zeitpunkt, wenn Sie die if-Anweisung eingeben? Ich benutze Google Maps Javascript API und es gibt eine Callback-Funktion, die aufgerufen wird, wenn die Suche abgeschlossen ist. Ich weiß nicht, wie es bei Android funktioniert. –
Siehe [LINK] (http://stackoverflow.com/questions/9990209/cant-mark-while-showing-the-current-location-in-mapview/9990668#9990668) es hat eine klare und klare Erklärung Ihrer Anforderung und wie Marker platziert werden. –
Ich kann Marker gut platzieren, mein Problem ist, dass es keine gute Position beim Start gibt. Ich habe diesen Code auch in meine on create-Methode eingefügt, er hofft einfach direkt auf meine else-Anweisung. Hat es mit meinen Berechtigungen zu tun? –