集成Android高德导航SDK

想要在导航中添加途径点,然后再手动与调用方法删除途经点。
看高德导航SDK中,找到了添加途径点的方法,但没有点击途经点的回调。
点击途径点没有反应,以上的问题该怎么去解决?

img


这是添加起点,终点与途径点。


高德导航SDK中,添加途径点可以使用:
java
AMapNavi.getInstance().addWayPoint(latLonPoint);
但是删除途经点并没有提供直接的删除方法,需要自己监听途经点Marker的点击事件,在点击时移除该途经点:
java
// 监听所有marker点击事件
AMapNavi.getInstance().addAMapNaviListener(new AMapNaviListener() {
    @Override
    public void onWayPointClick(int wayID) {
        // 移除该途经点
        AMapNavi.getInstance().removeWayPoint(wayID);
    }
});
那么在卡片式导航界面,可以添加自定义Marker用于表示途经点,并为其添加点击事件,在点击事件中调用 AMapNavi.getInstance().removeWayPoint(wayID); 移除该途经点。
具体代码如下:
java
// 添加Marker用于表示途经点
LatLonPoint latLonPoint = new LatLonPoint(39.906901, 116.437227);
AMapNavi.getInstance().addWayPoint(latLonPoint);
int wayPointId = latLonPoint.getWayPointId();

Marker wayPointMarker = aMap.addMarker(new MarkerOptions()
    .position(latLonPoint)
    .icon(BitmapDescriptorFactory.fromResource(R.mipmap.icon_way_point))
    .draggable(false));

// 监听Marker点击事件    
wayPointMarker.setOnMarkerClickListener(new AMap.OnMarkerClickListener() {
    @Override
    public boolean onMarkerClick(Marker marker) {
        // 移除途经点
        AMapNavi.getInstance().removeWayPoint(wayPointId);  
        return false;
    }
});
这样可以实现在卡片式导航界面中点击自定义的途经点Marker后,移除该途经点。
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/218238
  • 这篇博客也不错, 你可以看下Android 应用内实现导航页面,接入百度SDK内置导航,高德SDK内置导航
  • 除此之外, 这篇博客: Android:如何优雅的开发马甲包?中的 最复杂的就是某些sdk跟签名绑定的(例如:阿里人脸识别)怎么接入项目呢? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 当然是采用组件化开发啦,就是把不同签名的sdk,作为一个model引入项目,就可以啦。

  • 您还可以看一下 Frank Lee 老师的Android 实战开发 友盟统计SDK集成课程中的 友盟SDK的使用,集成方法小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    添加起点、终点和途径点,可以使用高德地图SDK提供的AMapNaviPath类来实现。具体可参考以下代码:

    //创建起点和终点的Latlng对象
    LatLng startLatLng = new LatLng(XX, XX);
    LatLng endLatLng = new LatLng(XX, XX);
    
    //创建途径点的列表
    List<NaviLatLng> wayPoints = new ArrayList<>();
    wayPoints.add(new NaviLatLng(XX, XX));
    wayPoints.add(new NaviLatLng(XX, XX));
    wayPoints.add(new NaviLatLng(XX, XX));
    
    //构造AMapNaviPath对象
    AMapNaviPath naviPath = new AMapNaviPath(startLatLng, endLatLng, wayPoints, null);
    
    //获取途径点的列表
    List<NaviLatLng> wayPointList = naviPath.getCoordList();
    

    在地图上添加起点和终点时,可以使用高德地图SDK提供的AMapNavi起点终点绘制功能。具体可参考以下代码:

    //创建起点和终点的Latlng对象
    LatLng startLatLng = new LatLng(XX, XX);
    LatLng endLatLng = new LatLng(XX, XX);
    
    //绘制起点
    MarkerOptions startMarkerOption = new MarkerOptions()
            .icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.start)))
            .position(startLatLng)
            .anchor(0.5f, 0.5f);
    mAMap.addMarker(startMarkerOption);
    
    //绘制终点
    MarkerOptions endMarkerOption = new MarkerOptions()
            .icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.end)))
            .position(endLatLng)
            .anchor(0.5f, 0.5f);
    mAMap.addMarker(endMarkerOption);
    

    其中,start和end分别为起点和终点的图标资源文件。

    如果需要手动删除途径点,可以使用高德地图SDK提供的AMapNavi实例的removeWayPoint方法来实现。具体可参考以下代码:

    //创建AMapNavi实例
    AMapNavi mAMapNavi = AMapNavi.getInstance(getApplicationContext());
    
    //添加途径点信息
    NaviLatLng wayPoint = new NaviLatLng(XX, XX);
    mAMapNavi.addWayPoint(wayPoint);
    
    //移除途径点信息
    mAMapNavi.removeWayPoint(wayPoint);