如何在Android中单击按钮找到我当前的位置(纬度+经度)?

时间:2011-04-22 16:25:52

标签: android gps location

我已经看过各种代码片段,它们可以找到各种方法的坐标,例如onlocationupdate()或onstatusChanged()....我想要的是一个简单的代码,点击一个按钮即可获取当前的GPS坐标...

3 个答案:

答案 0 :(得分:11)

Yogsma的回答讲述了如何接收自动更新。他引用的链接提供了您所需要的一切,但这里是如何进行手动更新的摘要版本:

假设您已经阅读了有关如何创建按钮的教程,那么您只需要为按钮添加一个侦听器,然后让侦听器调用一个函数来查询您的位置管理器。下面的代码全部内联,向您展示如何,但我会在其他地方实例化LocationManager(例如您的活动),并为点击侦听器创建一个单独的方法来调用以执行更新。

// getLocationButton is the name of your button.  Not the best name, I know.
getLocationButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // instantiate the location manager, note you will need to request permissions in your manifest
        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        // get the last know location from your location manager.
        Location location= locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        // now get the lat/lon from the location and do something with it.
        nowDoSomethingWith(location.getLatitude(), location.getLongitude());
    }
});

当然,您还需要在清单xml文件中使用位置管理器服务注册您的活动:

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

答案 1 :(得分:7)

LocationManager mLocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
                LocationListener mLocListener = new MyLocationListener();
                mLocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mLocListener);

public class MyLocationListener implements LocationListener{        

        public void onLocationChanged(Location loc) {           
            String message = String.format(
                        "New Location \n Longitude: %1$s \n Latitude: %2$s",
                        loc.getLongitude(), loc.getLatitude()
                );
                Toast.makeText(LbsGeocodingActivity.this, message, Toast.LENGTH_LONG).show();
        }
        public void onProviderDisabled(String arg0) {

        }
        public void onProviderEnabled(String provider) {

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

        }       
    }

阅读详细信息http://www.javacodegeeks.com/2010/09/android-location-based-services.html

答案 2 :(得分:4)

没有这样的机制可以根据需要立即获取当前位置。由于您需要查询Netowork或GPS提供商,这可能需要一些时间来实际获取该位置。

一种方法是使用立即返回的getLastKnownLocation。但是这个位置可能是陈旧的。另一种方法是注册PASSIVE_PROVIDER,通过它可以获得位置修复,希望其他应用程序请求定位。