完美简单的集成高德地图导航和语音播报功能

简介:

公司的项目用到了高德的导航功能,所以自己总结了一下高德的导航,希望对大家有所帮助。该功能集成了高德的导航和讯飞的语音播报。

集成步骤:

1) 到高德地图官网,申请账号和KEY, 进行集成

 

添加依赖,并且在app目录下的build,gradle文件中配置:

2) 在清单文件中添加权限以及配置:

这是配置的步骤。

3) 功能的实现,废话少说,直接上代码;

public class MainActivity extends Activity implements AMapNaviListener,
        View.OnClickListener, CompoundButton.OnCheckedChangeListener,LocationSource,
        AMapLocationListener {
    private boolean congestion, cost, hightspeed, avoidhightspeed;      //筛选路线条件
    /**
     * 导航对象(单例)
     */
    private AMapNavi mAMapNavi;
    private AMap mAmap;
    /**
     * 地图对象
     */
    private MapView mRouteMapView;
    private Marker mStartMarker;
    private Marker mEndMarker;
    /**
     * 选择起点Action标志位
     */
    private boolean mapClickStartReady;
    /**
     * 选择终点Aciton标志位
     */
    private boolean mapClickEndReady;
    private NaviLatLng endLatlng = new NaviLatLng(39.955846, 116.352765);
    private NaviLatLng startLatlng = new NaviLatLng(39.925041, 116.437901);
    private List<NaviLatLng> startList = new ArrayList<NaviLatLng>();
    /**
     * 途径点坐标集合
     */
    private List<NaviLatLng> wayList = new ArrayList<NaviLatLng>();
    /**
     * 终点坐标集合[建议就一个终点]
     */
    private List<NaviLatLng> endList = new ArrayList<NaviLatLng>();
    /**
     * 保存当前算好的路线
     */
    private SparseArray<RouteOverLay> routeOverlays = new SparseArray<RouteOverLay>();

    /**
     * 当前用户选中的路线,在下个页面进行导航
     */
    private int routeIndex;
    /**路线的权值,重合路线情况下,权值高的路线会覆盖权值低的路线**/
    private int zindex = 1;
    /**
     * 路线计算成功标志位
     */
    private boolean calculateSuccess = false;       //路线计算状态
    private boolean chooseRouteSuccess = false;     //路径选择状态

    private boolean mFirstFix=false;                    //记录是否第一次定位
    private AMapLocationClient mlocationClient;           //定位服务类
    private AMapLocationClientOption mLocationOption;     //设置定位参数
    private OnLocationChangedListener mListener;
    private final int SDK_PERMISSION = 1;                //申请权限

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRouteMapView = (MapView) findViewById(R.id.navi_view);
        mRouteMapView.onCreate(savedInstanceState);
        mAmap = mRouteMapView.getMap();
        init();                                             //调用初始化控件方法
        getPersimmions();                                   //获取定位动态权限
    }

    /**
     * 初始化控件
     */
    private void init() {
        //获取布局文件中的控件
        CheckBox congestion = (CheckBox) findViewById(R.id.congestion);
        CheckBox cost = (CheckBox) findViewById(R.id.cost);
        CheckBox hightspeed = (CheckBox) findViewById(R.id.hightspeed);
        CheckBox avoidhightspeed = (CheckBox) findViewById(R.id.avoidhightspeed);
        Button calculate = (Button) findViewById(R.id.calculate);
        Button startPoint = (Button) findViewById(R.id.startpoint);
        Button endPoint = (Button) findViewById(R.id.endpoint);
        Button selectroute = (Button) findViewById(R.id.selectroute);
        Button gpsnavi = (Button) findViewById(R.id.gpsnavi);
        //设置控件的单击事件
        calculate.setOnClickListener(this);
        startPoint.setOnClickListener(this);
        endPoint.setOnClickListener(this);
        selectroute.setOnClickListener(this);
        gpsnavi.setOnClickListener(this);
        //复选框事件
        congestion.setOnCheckedChangeListener(this);
        cost.setOnCheckedChangeListener(this);
        hightspeed.setOnCheckedChangeListener(this);
        avoidhightspeed.setOnCheckedChangeListener(this);

        /**
         * 地图单击事件,实现在地图中选择起点与终点
         */
        mAmap.setOnMapClickListener(new AMap.OnMapClickListener() {

            @Override
            public void onMapClick(LatLng latLng) {
                //控制选起点
                if (mapClickStartReady) {
                    //设置选中起点的坐标
                    startLatlng = new NaviLatLng(latLng.latitude, latLng.longitude);
                    mStartMarker.setPosition(latLng);           //在起点坐标位置绘制起点图标
                    startList.clear();                          //清除起点坐标
                    startList.add(startLatlng);                //保存起点坐标
                    mapClickStartReady = false;                //设置起点标志状态
                }
                //控制选终点
                if (mapClickEndReady) {
                    endLatlng = new NaviLatLng(latLng.latitude, latLng.longitude);
                    mEndMarker.setPosition(latLng);
                    endList.clear();
                    endList.add(endLatlng);
                    mapClickEndReady = false;
                }

            }
        });
        StartMarker();          //获取起点图标
        EndMarker();            //获取终点图标
        //创建导航对象
        mAMapNavi = AMapNavi.getInstance(getApplicationContext());
        mAMapNavi.addAMapNaviListener(this);    //添加导航事件回调监听
        setUpMap();                              //调用设置地图属性方法
    }
    //获取起点图标
    private void StartMarker() {
        // 获取设置起点的图标
        mStartMarker = mAmap.addMarker(new MarkerOptions().icon(BitmapDescriptorFactory
                .fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.start))));
    }
    //获取终点图标
    private void EndMarker() {
        mEndMarker = mAmap.addMarker(new MarkerOptions().icon(BitmapDescriptorFactory
                .fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.end))));
    }




    /**
     * 添加定位动态权限
     */
    private void getPersimmions() {
        /***
         * 定位权限为必须权限,用户如果禁止,则每次进入都会申请
         */
        if (Build.VERSION.S
  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值