Ho avuto un problema relativamente simili con un RPG GPS su cui stavo lavorando e qui ci sono alcune cose che ho notato:
In primo luogo, si può prendere un po 'per la vostra posizione a inizialmente essere trovato, che causerebbe quel problema dal momento che stai solo controllando se la posizione è nullo.
Si consiglia inoltre di assicurarsi i servizi di localizzazione del dispositivo sono in realtà abilitati prima di fare qualsiasi cosa:
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;
}
Dopo che ho fatto in modo che i fornitori sono disponibili ha installato una connessione in questo modo:
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);
}
La posizione viene quindi impostata in una variabile globale ogni volta che viene aggiornata e quindi salvata nelle preferenze. In questo modo, nel caso in cui i provider siano abilitati, ma stanno impiegando un po 'di tempo per recuperare la posizione, l'utente può continuare a utilizzare l'applicazione con la loro ultima posizione nota che l'app ha archiviato (non si applica alla prima volta il programma è eseguito).
So che ho lasciato molto lì, ma ho pensato che non era davvero necessario in quanto era auto-esplicativo o già spiegato in una risposta precedente.
Cheers ~
Forse la tua ricerca su google non è pronta al momento in cui inserisci la dichiarazione if? Io uso google maps javascript api e c'è una funzione di callback che viene chiamata quando la ricerca è completa. Non so come funziona su Android. –
Segnala questo [LINK] (http://stackoverflow.com/questions/9990209/cant-mark-while-showing-the-current-location-in-mapview/9990668#9990668) ha una spiegazione chiara e chiara del tuo requisito e come posizionare i marcatori. –
Posso posizionare gli indicatori bene, il mio problema è che non funziona bene all'inizio. Ho inserito questo codice nel mio metodo on create, ma continua a sperare direttamente nella mia altra dichiarazione. ha a che fare con i miei permessi? –