2012-04-22 10 views
6

Il mio codice dovrebbe trovare la posizione degli utenti e posizionare un indicatore sulla mappa quando si accede all'applicazione. Il mio valore di posizione è sempre uguale a null e non riceve mai un valore.Google maps api non posiziona marker nella posizione fine

if (location != null) { 
       lat = (int) (location.getLatitude() * 1E6); 
       longi = (int) (location.getLongitude() * 1E6); 
       GeoPoint ourLocation = new GeoPoint(lat, longi); 
       OverlayItem overlayItem = new OverlayItem(ourLocation, "AYO", 
         "Whats good yo"); 
       CustomPinpoint custom = new CustomPinpoint(d, CampusMap.this); 
       custom.insertPinpoint(overlayItem); 
       overlayList.add(custom); 

      } else { 
       Toast.makeText(CampusMap.this, "Couldn't get provider", 
         Toast.LENGTH_SHORT).show(); 

      } 

     } 
+0

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. –

+0

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. –

+0

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? –

risposta

1

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 ~

0
/* 
* getting the best location using the location manager 
* Constants.MINIMUM_TIME_BETWEEN_UPDATES = 1000 Constants.MINIMUM_TIME_BETWEEN_UPDATES  = 1 
*/ 
LocationManager mLocation; 
private String mBestProvider; 
// in your onCreate() do the following 
    mLocation = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    Criteria criteria = new Criteria(); 
mBestProvider = mLocation.getBestProvider(criteria, false); 
Location location = mLocation.getLastKnownLocation(mBestProvider); 
mLocation.requestLocationUpdates(
      LocationManager.GPS_PROVIDER, 
      Constants.MINIMUM_TIME_BETWEEN_UPDATES, 
      Constants.MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, 
      new LocationListenerManager() 
    ); 


// and use the following locationListener inner class 


private class LocationListenerManager implements LocationListener { 

    public void onLocationChanged(Location location) { 
     String message = String.format(
       "New Location \n Longitude: %1$s \n Latitude: %2$s", 
       location.getLongitude(), location.getLatitude() 
     ); 
     latitude = location.getLatitude(); 
     longitude = location.getLongitude(); 
     Toast.makeText(MapViewActivity.this, message, Toast.LENGTH_LONG).show(); 
     Log.v("poiint=====", ""+message); 

    } 

    public void onStatusChanged(String s, int i, Bundle b) { 
     Toast.makeText(MapViewActivity.this, "Provider status changed", 
       Toast.LENGTH_LONG).show(); 
    } 

    public void onProviderDisabled(String s) { 
     Toast.makeText(MapViewActivity.this, 
       "Provider disabled by the user. GPS turned off", 
       Toast.LENGTH_LONG).show(); 
    } 

    public void onProviderEnabled(String s) { 
     Toast.makeText(MapViewActivity.this, 
       "Provider enabled by the user. GPS turned on", 
       Toast.LENGTH_LONG).show(); 
    } 

} 
0

si deve inizializzare il LocationListener nel onstartActivity prima su creare in modo che posizione ottenere il valore posizione prima onCreate.

Problemi correlati