2017-06-09 11 views
0

私のMainActivityのonCreate関数で初期化されるlocationListenerを使用しようとしました。 その関数内では、場所も尋ねる必要がありますが、デバッグ中に関数が実行された後にリスナーが座標を返すことがわかっています。待っていてもうまくいきませんでした。アクティビティがロードされたときの場所の取得(onCreate)

アクティビティの作成中に場所を取得する方法、またはスレッドを通じてアクティビティビューを変更する方法を教えてください。

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    getSupportActionBar().hide(); 

    if(data.gB_GPS_searched == false) { 
     data.gB_GPS_searched = true; 
     LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     data.locationListener = new GPS(); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, data.locationListener); 
    } 
    data.set_pier("Bodenwerder"); 

    data.set_pier(data.get_closest_pier()); 
    String cityname = data.get_pier_name(); 
    if(cityname != null) 
     ((TextView)findViewById(R.id.current_city)).setText(cityname); 
} 

リスナーは基本的にそのように見えます。

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(); 
      } 
     } 
    } 
... 
} 

私が使用しているデータクラスは、受け取った保存と転送するためである...データ

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(); 
    } 
} 

答えて

1

私は場所を得るためにPrivacyStreamsライブラリを使用してお勧めします。

  1. app/build.gradleファイルにdependenciesに次の2行を追加します。

    dependencies { 
        compile 'com.github.privacystreams:privacystreams-core:0.1.3' 
        compile 'com.google.android.gms:play-services-location:10.2.1' 
    } 
    
  2. AndroidManifest.xmlに位置許可を追加します。

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    
  3. をご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これは私の最初のアンドロイドプロジェクトです。どこにファイルとコンパイルコードを配置する必要がありますか? –

+0

@TimoTreichel私は答えを更新しました。どうぞご覧ください。 –

+0

あなたの答えが私にとってどのように機能したかを更新しました –

関連する問題