34

乾杯、Android 経由で現在の GPS-Location を取得しようとしています。このチュートリアルVogellasの記事もフォローしました。それは機能していませんが。LocationManager.NETWORK_PROVIDER を使用すると、どこにいても常に緯度 51 度、経度 9 度になります。LocationManager.GPS_PROVIDER を使用すると、何も得られません。

GMapsを使用するとすべてが機能しますが:S理由はわかりません。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

}

}
4

6 に答える 6

31

問題は次のとおりです。

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

緯度と経度はdouble、位置を度で表しているため、値です。

それらを にキャストすることによりint、コンマの後ろのすべてを破棄することになり、大きな違いが生じます。「10 進度 - Wiki」を参照してください。

于 2013-05-11T15:05:39.410 に答える
23

試してみる :

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;
     }
    }
于 2013-05-11T15:04:29.113 に答える
13

このコードには 1 つの問題があります。

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

intに変更できますdouble

double latitude = location.getLatitude();
double longitude = location.getLongitude();
于 2014-10-12T14:02:37.087 に答える
9

最初の問題はlat、 andlonを double に変更することで解決されます。

ソリューションにコメントを追加したいLocation location = locationManager.getLastKnownLocation(bestProvider); 他のアプリがそのためにリスナーニングしていた最後の既知の場所を見つけるために機能します。たとえば、デバイスの起動以降にアプリがそれを実行しなかった場合、コードはゼロを返します (最近、それを理解するために時間を費やしました)。

また、必要がない場合は聞くのをやめるのも良い習慣です。locationManager.removeUpdates(this);

また、 のアクセス許可があってもmanifest、デバイスの Android 設定で位置情報サービスが有効になっている場合、コードは機能します。

于 2015-12-23T07:11:51.493 に答える