是否可以获取用户位置并将其存储在变量中,以便将其用于其他目的,例如向用户提供从他们位置到XYZ的路线,或更改用户位置的标记样式。
目前,我有这个;
map.setMyLocationEnabled(true);
我一直在寻找几个小时,但我似乎找不到任何有用的东西来解释如何存储用户当前位置。我正在使用片段而不是活动类。
很抱歉,如果这个问题听起来很愚蠢。
答案 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);