您的位置:首页 > 移动开发 > Android开发

Android利用高德地图实现实时导航,用AMap3DMap_3.4.0_AMapNavi_1.9.2_20160830.jar

2016-09-21 14:25 399 查看
package com.xiyangyang.android.modules.index.controllers;

import android.os.Bundle;
import android.util.Log;
import android.widget.ImageView;
import com.amap.api.navi.AMapNavi;
import com.amap.api.navi.AMapNaviListener;
import com.amap.api.navi.AMapNaviView;
import com.amap.api.navi.AMapNaviViewListener;
import com.amap.api.navi.enums.NaviType;
import com.amap.api.navi.model.AMapLaneInfo;
import com.amap.api.navi.model.AMapNaviCross;
import com.amap.api.navi.model.AMapNaviInfo;
import com.amap.api.navi.model.AMapNaviLocation;
import com.amap.api.navi.model.AMapNaviTrafficFacilityInfo;
import com.amap.api.navi.model.AimLessModeCongestionInfo;
import com.amap.api.navi.model.AimLessModeStat;
import com.amap.api.navi.model.NaviInfo;
import com.amap.api.navi.model.NaviLatLng;
import com.autonavi.tbt.NaviStaticInfo;
import com.autonavi.tbt.TrafficFacilityInfo;
import com.xiyangyang.android.R;
import com.xiyangyang.android.modules.common.controllers.CWBaseActivity;
import com.xiyangyang.android.modules.common.views.NavigationBar;
import com.xiyangyang.android.modules.index.util.TTSController;

import java.util.ArrayList;
import java.util.List;

/**
* Created by daniel on 2016/8/24.
* 导航
*/
public class NavigationActivity extends CWBaseActivity implements
AMapNaviViewListener, AMapNaviListener {
private NavigationBar navigationBar;
//导航View
private AMapNaviView aMapNaviView;
private AMapNavi mAMapNavi;
protected TTSController mTtsManager;
private List<NaviLatLng> mStartList = new ArrayList<>();
private List<NaviLatLng> mEndList = new ArrayList<>();
private List<NaviLatLng> mWayPointList;
private NaviLatLng mStartLatlng;
private NaviLatLng mEndLatlng;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_navigation);
initViews(savedInstanceState);
}

private void initViews(Bundle savedInstanceState) {
navigationBar = (NavigationBar) findViewById(R.id.navigationBar);
navigationBar.setTitle(getResources().getString(R.string.navigation));
((ImageView) navigationBar.getBackBackButton()).setImageResource(R.mipmap.back_icon);
aMapNaviView = (AMapNaviView) findViewById(R.id.navigation_mapview);
aMapNaviView.onCreate(savedInstanceState);
aMapNaviView.setAMapNaviViewListener(this);
//实例化语音引擎
mTtsManager = TTSController.getInstance(getApplicationContext());
mTtsManager.init();
//获取AMapNavi实例
mAMapNavi = AMapNavi.getInstance(getApplicationContext());
//添加监听回调,用于处理算路成功
mAMapNavi.addAMapNaviListener(this);
mAMapNavi.addAMapNaviListener(mTtsManager);

//设置模拟导航的行车速度
mAMapNavi.setEmulatorNaviSpeed(50);
mStartLatlng = new NaviLatLng(34.193455, 108.88618);
mEndLatlng = new NaviLatLng(34.193455, 108.88000);
mStartList.add(mStartLatlng);
mEndList.add(mEndLatlng);
}

@Override
protected void onResume() {
super.onResume();
aMapNaviView.onResume();
}

@Override
protected void onPause() {
super.onPause();
aMapNaviView.onPause();
//仅仅是停止你当前在说的这句话,一会到新的路口还是会再说的
mTtsManager.stopSpeaking();
//停止导航之后,会触及底层stop,然后就不会再有回调了,但是讯飞当前还是没有说完的半句话还是会说完
//mAMapNavi.stopNavi();
}

@Override
protected void onDestroy() {
super.onDestroy();
aMapNaviView.onDestroy();
//since 1.6.0 不再在naviview destroy的时候自动执行AMapNavi.stopNavi();请自行执行
mAMapNavi.stopNavi();
mAMapNavi.destroy();
mTtsManager.destroy();
}

@Override
public void onInitNaviFailure() {
showProgressDialog("init navi Failed");
}

@Override
public void onInitNaviSuccess() {
//初始化
/**
* 方法: int strategy=mAMapNavi.strategyConvert(congestion, avoidhightspeed, cost, hightspeed, multipleroute); 参数:
*
* @congestion 躲避拥堵
* @avoidhightspeed 不走高速
* @cost 避免收费
* @hightspeed 高速优先
* @multipleroute 多路径
*
*  说明: 以上参数都是boolean类型,其中multipleroute参数表示是否多条路线,如果为true则此策略会算出多条路线。
*  注意: 不走高速与高速优先不能同时为true 高速优先与避免收费不能同时为true
*/
int strategy = 0;
try {
//再次强调,最后一个参数为true时代表多路径,否则代表单路径
strategy = mAMapNavi.strategyConvert(true, false, false, false, false);
} catch (Exception e) {
e.printStackTrace();
}
mAMapNavi.calculateDriveRoute(mStartList, mEndList, mWayPointList, strategy);
}

@Override
public void onStartNavi(int type) {
//开始导航回调
}

@Override
public void onTrafficStatusUpdate() {
//
}

@Override
public void onLocationChange(AMapNaviLocation location) {
//当前位置回调
}

@Override
public void onGetNavigationText(int type, String text) {
//播报类型和播报文字回调
}

@Override
public void onEndEmulatorNavi() {
//结束模拟导航
}

@Override
public void onArriveDestination() {
//到达目的地
}

@Override
public void onArriveDestination(NaviStaticInfo naviStaticInfo) {
//到达目的地,有统计信息回调
}

@Override
public void onCalculateRouteSuccess() {
//路线计算成功
mAMapNavi.startNavi(NaviType.GPS);
}

@Override
public void onCalculateRouteFailure(int errorInfo) {
//路线计算失败
Log.i("dm", "errorInfo=" + errorInfo);
showProgressDialog("errorInfo:" + errorInfo);
}

@Override
public void onReCalculateRouteForYaw() {
//偏航后重新计算路线回调
}

@Override
public void onReCalculateRouteForTrafficJam() {
//拥堵后重新计算路线回调
}

@Override
public void onArrivedWayPoint(int wayID) {
//到达途径点
}

@Override
public void onGpsOpenStatus(boolean enabled) {
//GPS开关状态回调
}

@Override
public void onNaviSetting() {
//底部导航设置点击回调
}

@Override
public void onNaviMapMode(int isLock) {
//地图的模式,锁屏或锁车
}

@Override
public void onNaviCancel() {
finish();
}

@Override
public void onNaviTurnClick() {
//转弯view的点击回调
}

@Override
public void onNextRoadClick() {
//下一个道路View点击回调
}

@Override
public void onScanViewButtonClick() {
//全览按钮点击回调
}

@Deprecated
@Override
public void onNaviInfoUpdated(AMapNaviInfo naviInfo) {
//过时
}

@Override
public void onNaviInfoUpdate(NaviInfo naviinfo) {
//导航过程中的信息更新,请看NaviInfo的具体说明
}

@Override
public void OnUpdateTrafficFacility(TrafficFacilityInfo trafficFacilityInfo) {
//已过时
}

@Override
public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo) {
//已过时
}

@Override
public void showCross(AMapNaviCross aMapNaviCross) {
//显示转弯回调
}

@Override
public void hideCross() {
//隐藏转弯回调
}

@Override
public void showLaneInfo(AMapLaneInfo[] laneInfos, byte[] laneBackgroundInfo, byte[] laneRecommendedInfo) {
//显示车道信息

}

@Override
public void hideLaneInfo() {
//隐藏车道信息
}

@Override
public void onCalculateMultipleRoutesSuccess(int[] ints) {
//多路径算路成功回调
}

@Override
public void notifyParallelRoad(int i) {
if (i == 0) {
showProgressDialog("当前在主辅路过渡");
Log.d("wlx", "当前在主辅路过渡");
return;
}
if (i == 1) {
showProgressDialog("当前在主路");
Log.d("wlx", "当前在主路");
return;
}
if (i == 2) {
showProgressDialog("当前在辅路");
Log.d("wlx", "当前在辅路");
}
}

@Override
public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos) {
//更新交通设施信息
}

@Override
public void updateAimlessModeStatistics(AimLessModeStat aimLessModeStat) {
//更新巡航模式的统计信息
}

@Override
public void updateAimlessModeCongestionInfo(AimLessModeCongestionInfo aimLessModeCongestionInfo) {
//更新巡航模式的拥堵信息
}

@Override
public void onLockMap(boolean isLock) {
//锁地图状态发生变化时回调
}

@Override
public void onNaviViewLoaded() {
Log.d("wlx", "导航页面加载成功");
Log.d("wlx", "请不要使用AMapNaviView.getMap().setOnMapLoadedListener();会overwrite导航SDK内部画线逻辑");
}

@Override
public boolean onNaviBackClick() {
return false;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐