2017-06-09 2 views
0

J'ai essayé d'utiliser un localisateur d'emplacement initialisé dans la fonction onCreate de MainActivity. Dans cette fonction, l'emplacement doit également être demandé, mais pendant le débogage, j'ai découvert que l'auditeur commence à donner des coordonnées après que la fonction a fonctionné. L'attente n'a pas fonctionné non plus.Récupérer l'emplacement lorsque l'activité charge (dans onCreate)

Comment puis-je obtenir l'emplacement pendant que l'activité est créée ou comment puis-je modifier la vue des activités à l'aide d'un fil de discussion? L'écouteur ressemble fondamentalement à cela.

public class GPS implements android.location.LocationListener { 
    @Override 
    public void onLocationChanged(Location location) { 
     if(data.get_gps) { 
      try { 
       data.Latitute = ((Double)(location.getLatitude()*100)).intValue(); 
       data.Longitute = ((Double)(location.getLongitude()*100)).intValue(); 
       Thread.sleep(250); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
... 
} 

La classe de données que je utilise est pour l'économie et transfering reçu ... données

public class data { 
    public static GPS locationListener; 
    public static int Latitute = 0; 
    public static int Longitute = 0; 
    public static boolean gB_GPS_searched = false; 
    private static Map<String,int[]> coordinates = new HashMap<String,int[]>(); 
    private static int gI_current_city = -1; 
    private static List<String> g_piernames = new ArrayList<>(); 

    public static void set_pier(String pS_piername) 
    { 
     for(int i = 0; i < g_piernames.size(); i++) 
      if(g_piernames.get(i).equals(pS_piername)) 
      { 
       gI_current_city = i; 
       i = g_piernames.size(); 
      } 
    } 

    public static String get_pier_name() 
    { 
     return g_piernames.get(gI_current_city); 
    } 

    public static String get_closest_pier() 
    { 
     String cityname = ""; 
     int x = -1; 
     int y = -1; 

     for (Object key : coordinates.keySet().toArray()) { 
      if(x == -1) 
      { 
       x = coordinates.get(key.toString())[0]; 
       y = coordinates.get(key.toString())[1]; 
       cityname = key.toString(); 
      }else{ 
       if(pyth(Math.abs(Latitute-x),Math.abs(Longitute-y)) > pyth(Math.abs(Latitute-coordinates.get(key.toString())[0]),Math.abs(Longitute-coordinates.get(key.toString())[1]))) 
       { 
        x = coordinates.get(key.toString())[0]; 
        y = coordinates.get(key.toString())[1]; 
        cityname = key.toString(); 
       } 
      } 
     } 
     return cityname; 
    } 

    private static int pyth(int a, int b) 
    { 
     return ((Double)Math.sqrt(a*a+b*b)).intValue(); 
    } 
} 

Répondre

1

Je vous recommande d'utiliser PrivacyStreams bibliothèque pour obtenir des emplacements.

  1. Ajouter les deux lignes à dependencies dans le fichier app/build.gradle suivants:

    dependencies { 
        compile 'com.github.privacystreams:privacystreams-core:0.1.3' 
        compile 'com.google.android.gms:play-services-location:10.2.1' 
    } 
    
  2. Ajouter la permission de localisation à AndroidManifest.xml:

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    
  3. Dans votre méthode onCreate:

    Globals.LocationConfig.useGoogleService = true; 
    UQI uqi = new UQI(this); 
    uqi.getData(Geolocation.asUpdates(Geolocation.LEVEL_EXACT), Purpose.UTILITY("<your purpose of getting location>")) 
        .forEach(Geolocation.LAT_LON, new Callback<LatLon>() { 
         protected void onInput(LatLon latLon) { 
          data.Latitute = ((Double) (latLon.getLatitude() * 100)).intValue(); 
          data.Longitute = ((Double) (latLon.getLongitude() * 100)).intValue(); 
          // Do something with the coordinates 
         } 
        }); 
    
+0

tbh c'est mon premier projet avec android. Où dois-je placer les fichiers et les codes de compilation? –

+0

@TimoTreichel J'ai mis à jour la réponse, s'il vous plaît jeter un oeil. –

+0

J'ai mis à jour votre réponse à comment cela a fonctionné pour moi –