1

現在地の緯度と経度を表示したい..Googleで検索するのではなく、SOで検索しました。

現在地の緯度と経度を表示したいだけです。

以下の私のコードを参照してください:

public class LocationGetter extends Activity {

@Override

public void onCreate(Bundle savedInstanceState)
{

super.onCreate(savedInstanceState);

TextView tv = new TextView(this);

LocationManager mlocManager = 
                (LocationManager) getSystemService(Context.LOCATION_SERVICE);

LocationListener mlocListener = new LocationManagerHelper();

mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30000, 100,mlocListener);

if (mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
        tv.append("Latitude:- " + LocationManagerHelper.getLatitude()
                + '\n');
        tv.append("Longitude:- " + LocationManagerHelper.getLongitude()
                + '\n');

        Log.i("MyLocation1",Double.toString(LocationManagerHelper.getLatitude())+" "+Double.toString(LocationManagerHelper.getLongitude()));

} else {
    tv.setText("GPS is not turned on...");
}

/** set the content view to the TextView */
setContentView(tv);

}

/* Class My Location Listener */

public static class LocationManagerHelper implements LocationListener {

    private static double latitude;
    private static double longitude;

    @Override
    public void onLocationChanged(Location loc) {
        latitude = loc.getLatitude();
        longitude = loc.getLongitude();
        Log.i("MyLocation",Double.toString(latitude)+" "+Double.toString(longitude));
    }

    @Override
    public void onProviderDisabled(String provider) { }

    @Override
    public void onProviderEnabled(String provider) { }

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

    }

    public static double getLatitude() {
        return latitude;
    }

    public static double getLongitude() {
        return longitude;
    }

}

} 

マニフェスト ファイルにもアクセス許可を追加しました。

 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

私が得ている出力を見てください:

ここに画像の説明を入力

どこが間違っているのですか?理解できません。単純なコードであり、なぜ機能しないのですか?

4

5 に答える 5

2

tv.append()コードを確認したところ、これらの変更で動作します。毎回呼び出されるメソッドに呼び出しを移動するだけで済みます。それonLocationChanged()を CallBack に使用しない場合は、最初の設定値のみが取得され、一度だけ実行されます。

        public void onLocationChanged(Location loc) {
            latitude = loc.getLatitude();
            longitude = loc.getLongitude();
            Log.i("MyLocation",Double.toString(latitude)+" "+Double.toString(longitude));
            tv.append("Latitude:- " + LocationManagerHelper.getLatitude()
                    + '\n');
            tv.append("Longitude:- " + LocationManagerHelper.getLongitude()
                    + '\n');

            Log.i("MyLocation1",Double.toString(LocationManagerHelper.getLatitude())+" "+Double.toString(LocationManagerHelper.getLongitude()));

        }

これらの権限を使用しましたAndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />    
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />    
<uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES" />    

これらを見て、興味のないものを除外できます。ここからダウンロードした .gpx ファイルを使用しました

Android 2.2でテストしましたが、現在地の更新が機能しています

于 2011-04-07T10:32:46.140 に答える
2

Onlocationchanged で位置情報を取得しました

 public void onLocationChanged(Location loc) {
    latitude = loc.getLatitude();
    longitude = loc.getLongitude();
    Log.i("MyLocation",Double.toString(latitude)+" "+Double.toString(longitude));
  }

そのため、緯度と経度は現在の場所から変更された場合にのみ表示されます。確認のために、緯度と経度を指定し、DDMS のエミュレーター コントロールから送信してから、プログラムを実行します。確かに場所が表示されます。

ここに画像の説明を入力

于 2011-04-07T10:45:10.047 に答える
1

このプログラムをデバイスで実行すると、位置を変更するまで緯度と経度 0.0 が表示されます。出力を表示するには、現在の位置から少なくとも 10 メートル移動する必要があります。変更なしで現在位置onLocationChange()メソッドが起動せず、出力が 0.0 になるため

于 2012-09-27T03:49:21.600 に答える
0

を使用しLocationManagerます。

LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
double longitude = location.getLongitude();
double latitude = location.getLatitude();

への呼び出しgetLastKnownLocation()はブロックされません。つまり、null現在利用可能な位置がない場合に戻ります。そのため、代わりにメソッドLocationListenerに aを渡すことを検討してください。これにより、現在地の非同期更新が得られます。requestLocationUpdates()

private final LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
        longitude = location.getLongitude();
        latitude = location.getLatitude();
    }
}

lm.requestLocationUpdates(LocationManager.GPS, 2000, 10, locationListener);

GPS を使用する場合は、アプリケーションにACCESS_FINE_LOCATION許可を与える必要があります。

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

ACCESS_COARSE_LOCATIONまた、GPS が利用できない場合のアクセス許可を追加し、getBestProvider()方法でロケーション プロバイダーを選択することもできます。

于 2011-04-07T09:48:19.410 に答える
0

エミュレーターでは GPS 座標を取得できないと思います。モバイルで作業している場合は、建物の外で GPS を試してください。建物内の GPS 座標を取得できない場合があります。その時も失敗した場合は、成功したコードを投稿します。

以下のコードは、私がテストしたばかりで、私にとってはうまくいきます..

 import android.app.Activity;
 import android.content.Context;
 import android.location.Location;
 import android.location.LocationListener;
 import android.location.LocationManager;
 import android.os.Bundle;
 import android.widget.Toast;

 public class GetGPS extends Activity {

String GPSPROVIDER = LocationManager.GPS_PROVIDER;
private  static final long MIN_GEOGRAPHIC_POOLING_TIME_PERIOD = 10000;
private  static final float MIN_GEOGRAPHIC_POOLING_DISTANCE = (float)5.0;

public LocationManager gpsLocationManager;

static Context context = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    context = this;

    /*Get a listener for GPS*/
    LocationListener gpsLocationListener = null;

    gpsLocationListener = new GpsLocationListener(this);

    /*Start Location Service for GPS*/
    gpsLocationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

    /*Register GPS listener with Location Manager*/
    gpsLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
            MIN_GEOGRAPHIC_POOLING_TIME_PERIOD,
            MIN_GEOGRAPHIC_POOLING_DISTANCE, gpsLocationListener);

    boolean isavailable = gpsLocationManager.isProviderEnabled(GPSPROVIDER);

    if(isavailable) {

        Location loc = gpsLocationManager.getLastKnownLocation("gps");

        if(loc != null) {
            double latitude = loc.getLatitude();
            double longitude = loc.getLongitude();

            Toast.makeText(GetGPS.this,"Longitude is  "+longitude + "   Latitude is   "+latitude, Toast.LENGTH_LONG).show();

        }
    }

}

public static class GpsLocationListener implements LocationListener {


    public GpsLocationListener(Context context){

    }

    public void onLocationChanged(Location loc) {

        if (loc != null) {

            double latitude = loc.getLatitude();
            double longitude = loc.getLongitude();

            Toast.makeText(context,"Longitude is  "+longitude + "   Latitude is   "+latitude, Toast.LENGTH_LONG).show();

        }

    }//End of onLocationChanged Method

    @Override
    public void onProviderDisabled(String provider) {

    }//End of onProviderDisabled Method

    @Override
    public void onProviderEnabled(String provider) {

    }//End of onProviderEnabled Method

    @Override
    public void onStatusChanged(String provider, int status,
            Bundle extras) {


    }//End of onStatusChanged Method

}//End of GpsLocationListener class
}

デバイスをある場所から別の場所に移動して、これをテストしました...

それが役立つことを願っています..

于 2011-04-07T09:55:59.780 に答える