2013-05-11 20 views
28

乾杯、私はAndroid経由で現在のGPS位置を取得しようとしています。私はthis TutorialVogellas articleの順に続きました。それは動作していません。 LocationManager.NETWORK_PROVIDERを使用する場合、私はどこにいても、常に51の緯度と9の経度を取得しています。 LocationManager.GPS_PROVIDERを使用すると、何も得られません。Android GPSの場所を取得する方法

GMapsを使用するとすべてが機能しますが、理由はわかりません。 GMapsのような現在のGPS位置を取得するにはどうしたらいいですか?ここで

は私のコードです:

package com.example.gpslocation; 

import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.app.Activity; 
import android.content.Context; 
import android.util.Log; 
import android.view.Menu; 

public class GPS_Location extends Activity implements LocationListener { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_gps__location); 

    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.gps__location, menu); 
    return true; 
} 

@Override 
public void onLocationChanged(Location location) { 
    // TODO Auto-generated method stub 

    int latitude = (int) (location.getLatitude()); 
    int longitude = (int) (location.getLongitude()); 

    Log.i("Geo_Location", "Latitude: " + latitude + ", Longitude: " + longitude); 
} 

@Override 
public void onProviderDisabled(String provider) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onProviderEnabled(String provider) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
    // TODO Auto-generated method stub 

} 

} 
+2

高レベルとGPSの位置を取得する簡単な方法のために、あなたはこのライブラリを使用することがあります。https://github.com/delight-im/Android-SimpleLocation – caw

+0

http:// stackoverflowを確認してください。com/questions/1513485/how-do-i-get-the-current-gps-location-programmatically-in-android/38897436#38897436 –

答えて

25

はここにあなたの問題です:彼らは表現するため

int latitude = (int) (location.getLatitude()); 
int longitude = (int) (location.getLongitude()); 

緯度と経度は、double -valuesあります位置は度です。

intにキャストすると、コンマの後ろにあるすべてが破棄されるため、大きな違いが生じます。

int latitude = (int) (location.getLatitude()); 
int longitude = (int) (location.getLongitude()); 

あなたが最初の問題は倍増するlatlonを変更することによって解決されるint

double latitude = location.getLatitude(); 
double longitude = location.getLongitude(); 
+1

既にそれは何かばかなと思っていました。あなたはそれを証明しました; P Ty – JustBasti

+0

@JustBastiそれを答えとしてマークする必要があります。 –

+0

yehちょっと忘れました:P thx – JustBasti

20

はそれを試してみる:

public LatLng getLocation() 
    { 
    // Get the location manager 
    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
    Criteria criteria = new Criteria(); 
    String bestProvider = locationManager.getBestProvider(criteria, false); 
    Location location = locationManager.getLastKnownLocation(bestProvider); 
    Double lat,lon; 
    try { 
     lat = location.getLatitude(); 
     lon = location.getLongitude(); 
     return new LatLng(lat, lon); 
    } 
    catch (NullPointerException e){ 
     e.printStackTrace(); 
     return null; 
    } 
    } 
+4

答えをありがとう、私はすでにあなたのコードを試して、あなたに問題を示すための最も簡単な解決方法へPありがとうございました – JustBasti

12

このコードは、一つの問題を持っている参照してください。

ソリューションにコメントを追加したいLocation location = locationManager.getLastKnownLocation(bestProvider); これは、他のアプリがそれを知っていたときに最後の既知の場所を見つけるのに役立ちます。たとえば、デバイスが起動してからアプリが起動しなかった場合、コードはゼロを返します(最近、自分自身で最近それを把握するために時間を費やしました)。

はまた、それもmanifestの権限で、コードがロケーションサービスは、デバイス上のAndroidの設定で有効になっているときに動作し、locationManager.removeUpdates(this);

によってそのための必要はまた、存在しない場合にリスニングを停止するとよいでしょう。

0

抜粋: - あなたが上見ることができるように

try 
     { 
      cnt++;scnt++;now=System.currentTimeMillis();r=rand.nextInt(6);r++; 
      loc=lm.getLastKnownLocation(best); 
      if(loc!=null){lat=loc.getLatitude();lng=loc.getLongitude();} 

      Thread.sleep(100); 
      handler.sendMessage(handler.obtainMessage()); 
     } 
     catch (InterruptedException e) 
     { 
      Toast.makeText(this, "Error="+e.toString(), Toast.LENGTH_LONG).show(); 
     } 

、スレッドが連続して長く、現在の時刻とランダムサイコロ投げを伴って含む、GPSの緯度を表示するユーザ・インターフェースの活動のメインスレッドと一緒に実行されています。

あなたが興味があるなら、ただ完全なコードをチェック: GPS Location with a randomized dice throw & current time in separate thread

関連する問題