Как получить GPS-координаты пользователя, нажав кнопку - PullRequest
0 голосов
/ 22 июня 2011

я хочу сделать приложение следующим образом:

Пользователь нажимает кнопку. Приложение показывает координаты пользователя (Широта и Долгота)

Я выполняю шаги здесь

// Acquire a reference to the system Location Manager
    LocationManager locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);

    // Define a listener that responds to location updates
    LocationListener locationListener = new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {
          // Called when a new location is found by the network location provider.
          double glat = location.getLatitude();
          double glong = location.getLongitude();
          Toast.makeText(getApplicationContext(), "Your position\n"+glat+"\n"+glong, Toast.LENGTH_LONG).show();
        }
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {}
        @Override
        public void onProviderEnabled(String provider) {}
        @Override
        public void onProviderDisabled(String provider) {}
      };

    // Register the listener with the Location Manager to receive location updates
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

как реализовать это для события нажатия кнопки?

если пользователь нажимает кнопку, появляется тост с указанием позиции:)

ОБНОВЛЕНИЕ

Я реализую это с помощью startActivityForResult (), но результат пустой или нуль, вот мой код:

это код кнопки, которую я хочу нажать

btn_obj_useKor.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View arg0) {             
     Intent intent = new Intent(getApplicationContext(), MyLocationListener.class);
     startActivityForResult(intent, 0);
   }
});

и это мой класс MyLocationListener:

public class MyLocationListener extends Activity{

    Intent intent;
    String output = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent intent = getIntent();

        LocationManager locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);

        LocationListener locationListener = new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {
                double glat = location.getLatitude();
                double glong = location.getLongitude();
                output = glat+","+glong;                
            }
            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {}
            @Override
            public void onProviderEnabled(String provider) {}
            @Override
            public void onProviderDisabled(String provider) {}
        };

        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

        intent.putExtra("returnedData", output);
        setResult(RESULT_OK, intent);
        finish();
    }

}

Когда я нажимаю на кнопку, она показывает WTF!это означает, что результат равен нулю или пуст.

в чем проблема и что мне тогда делать?

Ответы [ 2 ]

0 голосов
/ 22 июня 2011

Ответ на onClick - это пользовательское событие, LocationListener onLocationChanged также является событием.Если вы инициируете пользовательское событие до события LocationListener, позиция не будет доступна для отображения.

Я предлагаю вызвать startActivityForResult для другого действия в обработчике кнопки onClick, во втором действии все LocationManager & LocationListenerкод в нем, в обработчике события onLocationChanged вы передаете позицию обратно к 1-му действию.

0 голосов
/ 22 июня 2011

Результат не будет возвращаться немедленно, поскольку провайдеру GPS требуется время, чтобы начать поиск вашего местоположения.Вот почему вы слушаете событие обратного вызова.

В настоящее время ваш код прослушивает сетевое местоположение, что не очень точно.Измените LocationManager на GPS_Provider (в последней строке), чтобы использовать GPS, если он включен.

...