he tenido un problema relativamente similar con un juego de rol GPS que estaba trabajando y aquí están algunas cosas que noté:
En primer lugar, se puede tomar un tiempo para su ubicación al encontrarse inicialmente, lo que provocaría ese problema ya que solo está comprobando si la ubicación es nula.
También es posible que desee asegurarse los servicios de ubicación del dispositivo en realidad están habilitadas antes de hacer nada:
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;
}
Después me he asegurado de los proveedores son de configuración disponibles que una conexión de este 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 ubicación se establece en una variable global cada vez que se actualiza y luego se guarda en las preferencias. De esta forma, en el caso de que los proveedores estén habilitados, pero demoren un tiempo en recuperar la ubicación, el usuario puede seguir utilizando la aplicación con su última ubicación conocida que la aplicación almacenó (no se aplica a la primera vez que el programa se ejecuta).
Sé que omití mucho, pero pensé que no era realmente necesario ya que se explica por sí mismo o ya se explicó en una respuesta anterior.
Saludos ~
¿Quizás su búsqueda de Google no está lista en el momento en que ingresa la declaración if? Yo uso google maps javascript api y hay una función de devolución de llamada que se llama cuando se completa la búsqueda. No sé cómo funciona en Android. –
Consulte este [LINK] (http://stackoverflow.com/questions/9990209/cant-mark-while-showing-the-current-location-in-mapview/9990668#9990668) tiene una explicación clara y clara de su requisito y cómo colocar marcadores. –
Puedo colocar marcadores muy bien, mi problema es que no tiene una buena ubicación al inicio. También coloqué este código en mi método de creación, simplemente sigue esperando directamente a mi declaración de otro. ¿Tiene que ver con mis permisos? –