在Android中使用gps获取路线点列表的有效方法
Posted
技术标签:
【中文标题】在Android中使用gps获取路线点列表的有效方法【英文标题】:Effective way to get the route point list using gps in Android 【发布时间】:2015-05-24 19:46:40 【问题描述】:我有一种在 Google 地图上绘制路线的方法。
此方法需要 List
的 LatitudeLongitude
对象,顾名思义,其中包含一对 double latitude
和 double longitude
。
现在我需要实现一个填充路径点列表的方法,这样:
方法
protected void startFillList()
//to do
在移动过程中开始获取坐标并将这些添加到列表中,
方法
protected List<LatitudeLongitude> stopFillList()
//to do
停止获取新坐标并返回结果列表
我该怎么做?
如果我使用一段时间连续调用(直到达到停止条件)
locationManager.getLastKnownLocation(provider);
为了填满列表,应用程序残酷地挂起。
【问题讨论】:
使用Directions API。回复应包含可用于填写列表的要点。 @Andy 你能给我更多细节或样品吗?我已经查看了链接,但我不明白如何解决我的问题。 【参考方案1】:如果我正确理解您的问题,您可以尝试以下方式:
private ArrayList<LatLng> CoordsList = new ArrayList<>();
private static boolean addCoords = false;
protected void startFillList()
addCoords = true;
protected ArrayList<LatLng> stopFillList()
addCoords = false;
return CoordsList;
@Override
public void onLocationChanged(Location location)
double latitude = location.getLatitude();
double longitude = location.getLongitude();
// Creating a LatLng object and add to list
currentCoods = new LatLng(latitude, longitude);
//check condition if add coordinates
if(addCoords)
CoordsList.add(currentCoods);
希望对您有所帮助!
【讨论】:
@AndreaF,这个答案对您的问题有帮助吗? @AndreaF,你会接受我的解决方案,还是有更好的解决方案?我想我的解决方案既简单又有效,不是吗?【参考方案2】:去看看
https://developer.android.com/training/location/receive-location-updates.html
public class MyActivity extends ActionBarActivity implements
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener,
com.google.android.gms.location.LocationListener
LocationManager locationManager;
GoogleApiClient googleApiClient;
List<LatitudeLongitude> myPositions=new List<LatitudeLongitude>();
//Update Position after 2 minutes
private static final int UPDATE_POS_AFTER_MILLIS=120000;
@Override
protected void onResume()
locationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
startFillList()
protected void startFillList()
buildGoogleApiClient();
googleApiClient.connect();
protected synchronized void buildGoogleApiClient()
googleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
@Override
public void onConnected(Bundle bundle)
if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
if(googleApiClient.isConnected())
currentLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
if(currentLocation!=null)
LatLng currentLatLng = new LatLng(
(float) currentLocation.getLatitude(),
(float) currentLocation.getLongitude());
myPositions.add(currentLatLng);
//This is for periodically request
createLocationRequest();
else
googleApiClient.connect();
else
//Notify User GPS is disabled
protected void createLocationRequest()
locationRequest = new LocationRequest();
locationRequest.setInterval(UPDATE_POS_AFTER_MILLIS);
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
LocationServices.FusedLocationApi.requestLocationUpdates(
googleApiClient, locationRequest, this);
//After 2 Minutes this method will be called
@Override
public void onLocationChanged(Location location)
LatLng currentLatLng = new LatLng(
(float) currentLocation.getLatitude(),
(float) currentLocation.getLongitude());
myPositions.add(currentLatLng);
protected List<LatitudeLongitude> stopFillList()
LocationServices.FusedLocationApi.removeLocationUpdates(
googleApiClient, this);
return myPositions;
别忘了实现所有接口方法
【讨论】:
以上是关于在Android中使用gps获取路线点列表的有效方法的主要内容,如果未能解决你的问题,请参考以下文章