获取用户位置并将其存储在变量Android中

时间:2015-01-04 21:37:51

标签: android google-maps location

是否可以获取用户位置并将其存储在变量中,以便将其用于其他目的,例如向用户提供从他们位置到XYZ的路线,或更改用户位置的标记样式。

目前,我有这个;

map.setMyLocationEnabled(true); 

我一直在寻找几个小时,但我似乎找不到任何有用的东西来解释如何存储用户当前位置。我正在使用片段而不是活动类。

很抱歉,如果这个问题听起来很愚蠢。

2 个答案:

答案 0 :(得分:1)

执行您要求的一种简单方法是检索用户的LastKnownLocation(如上面的评论中所建议的),然后创建自己的Location类,这样您就可以创建一个变量,用于存储您认为与用户所在位置相关的所有信息(即 - 纬度,经度,地址等)。

示例Location类可能看起来像这样......

public class UserLocation {
    private String name; // name of the location
    private double latitude; // latitude (-90 to +90)
    private double longitude; // longitude (-180 to +180)
    private String address; // address of the location

    ... // constructor(s), getters, setters, other methods
}

将用户的当前位置存储在Location变量中可能如下所示......

...
// get last known location
Location location = locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria, false));

// create variable to store the user's location
UserLocation currentLocation = new UserLocation();

// set values of our location variable
currentLocation.setLatitude(location.getLatitude());
currentLocation.setLongitude(location.getLongitude());
...

答案 1 :(得分:1)

如果您使用GoogleMap,则可以通过GoogleMap中的OnMyLocationChangeListener轻松处理位置更改。 例如:

map.setOnMyLocationChangeListener(this);

//this - is some class which implements OnMyLocationChangeListener interface.

//method for handling this event.    
@Override
public void onMyLocationChange(Location location) {
    Logger.log(TAG, "My location changed!");
    double lat = location.getLatitude();
    double lng = location.getLongitude();
    //TODO
}

所以,现在你可以处理用户所在位置的所有变化。

我们还有一个很好的类来存储单点 - LatLng。如果您需要存储点集,只需创建自己的类,例如:

public class MyLocations {
    private final List<LatLng> locations = new ArrayList<LatLng>();

    public void addLocation(LatLng latLng) {
        locations.add(latLng);
    }
    //other methods
}

创建此类的实例并重写onMyLocationChange方法:

MyLocations locations = new MyLocations();
//...
@Override
public void onMyLocationChange(Location location) {
    Logger.log(TAG, "My location changed!");
    double lat = location.getLatitude();
    double lng = location.getLongitude();
    LatLng latLng = new LatLng(lat, lng);
    locations.add(latLng);
    //other code, if needed
}

这个位置更改的监听器经常调用,它可能对电池产生不良影响,因此,如果要禁用它,只需在地图中将其设置为null:

map.setOnMyLocationChangeListener(null);