在Android中使用gps获取路线点列表的有效方法

Posted

技术标签:

【中文标题】在Android中使用gps获取路线点列表的有效方法【英文标题】:Effective way to get the route point list using gps in Android 【发布时间】:2015-05-24 19:46:40 【问题描述】:

我有一种在 Google 地图上绘制路线的方法。 此方法需要 ListLatitudeLongitude 对象,顾名思义,其中包含一对 double latitudedouble 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获取路线点列表的有效方法的主要内容,如果未能解决你的问题,请参考以下文章

从特定的飞行计划航点获取 GPS 坐标

使用 android 获取 gps 位置 - 并不总是有效

在网络浏览器中模拟 gps 位置路线

在 android 模拟器中模拟 GPS 路线

跟踪公交GPS点是否在路上 - Google Maps API

android nGPS:基于磁场而不是gps或细胞三角测量获取位置