045_Android 高德API的使用之导航
2019-08-16 本文已影响6人
wakawakai
创建项目 并配置清单文件
-
添加需要的权限
<!--6.0以后记得动态获取权限--> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" />
-
application子标签设置高德Key
<meta-data android:name="com.amap.api.v2.apikey" android:value="你申请的Key" />
导入高德依赖
地图依赖:implementation 'com.amap.api:map2d:latest.integration'
搜索依赖:implementation 'com.amap.api:search:latest.integration'
导航依赖:implementation 'com.amap.api:navi-3dmap:latest.integration'
定位依赖:implementation 'com.amap.api:location:latest.integration'
* 导航
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import com.amap.api.navi.AMapNavi;
import com.amap.api.navi.AMapNaviListener;
import com.amap.api.navi.AMapNaviView;
import com.amap.api.navi.enums.NaviType;
import com.amap.api.navi.model.AMapCalcRouteResult;
import com.amap.api.navi.model.AMapLaneInfo;
import com.amap.api.navi.model.AMapModelCross;
import com.amap.api.navi.model.AMapNaviCameraInfo;
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.AMapNaviRouteNotifyData;
import com.amap.api.navi.model.AMapNaviTrafficFacilityInfo;
import com.amap.api.navi.model.AMapServiceAreaInfo;
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.TrafficFacilityInfo;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity implements AMapNaviListener {
private String[] permissions = {
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_NETWORK_STATE",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.READ_PHONE_STATE",
"android.permission.CHANGE_WIFI_STATE",
"android.permission.ACCESS_WIFI_STATE",
"android.permission.WAKE_LOCK"
};
private AMapNaviView mAMapNaviView;
private AMapNavi mAMapNavi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
//动态申请所需要的权限
ActivityCompat.requestPermissions(this, permissions, 101);
//获取 AMapNaviView 实例
mAMapNaviView.onCreate(savedInstanceState);
//获取AMapNavi实例
mAMapNavi = AMapNavi.getInstance(getApplicationContext());
//添加监听回调,用于处理算路成功
mAMapNavi.addAMapNaviListener(this);
}
private void initView() {
mAMapNaviView = (AMapNaviView) findViewById(R.id.map_navi);
}
@Override
protected void onResume() {
super.onResume();
mAMapNaviView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mAMapNaviView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mAMapNaviView.onDestroy();
}
/***
* AMapNavi对象初始化完成
*/
@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 {
strategy = mAMapNavi.strategyConvert(true, false, false, false, false);
} catch (Exception e) {
e.printStackTrace();
}
ArrayList<NaviLatLng> sList = new ArrayList<>();
ArrayList<NaviLatLng> eList = new ArrayList<>();
//天安门的经纬度
sList.add(new NaviLatLng(39.906901, 116.397972));
//???的经纬度
eList.add(new NaviLatLng(33.906901, 116.397972));
//驾车路线
mAMapNavi.calculateDriveRoute(sList, eList, eList, strategy);
//骑车路线
// mAMapNavi.calculateRideRoute(sList.get(0),eList.get(0));
//步行路线
// mAMapNavi.calculateWalkRoute(sList.get(0), eList.get(0));
}
/***
* 当驾车路线规划成功时,若是单一策略,会进 onCalculateRouteSuccess 回调
* @param ints
*/
@Override
public void onCalculateRouteSuccess(int[] ints) {
//显示路线
mAMapNavi.startNavi(NaviType.GPS);
}
@Override
public void onInitNaviFailure() {
}
@Override
public void onStartNavi(int i) {
}
@Override
public void onTrafficStatusUpdate() {
}
@Override
public void onLocationChange(AMapNaviLocation aMapNaviLocation) {
}
@Override
public void onGetNavigationText(int i, String s) {
}
@Override
public void onGetNavigationText(String s) {
}
@Override
public void onEndEmulatorNavi() {
}
@Override
public void onArriveDestination() {
}
@Override
public void onCalculateRouteFailure(int i) {
}
@Override
public void onReCalculateRouteForYaw() {
}
@Override
public void onReCalculateRouteForTrafficJam() {
}
@Override
public void onArrivedWayPoint(int i) {
}
@Override
public void onGpsOpenStatus(boolean b) {
}
@Override
public void onNaviInfoUpdate(NaviInfo naviInfo) {
}
@Override
public void onNaviInfoUpdated(AMapNaviInfo aMapNaviInfo) {
}
@Override
public void updateCameraInfo(AMapNaviCameraInfo[] aMapNaviCameraInfos) {
}
@Override
public void updateIntervalCameraInfo(AMapNaviCameraInfo aMapNaviCameraInfo, AMapNaviCameraInfo aMapNaviCameraInfo1, int i) {
}
@Override
public void onServiceAreaUpdate(AMapServiceAreaInfo[] aMapServiceAreaInfos) {
}
@Override
public void showCross(AMapNaviCross aMapNaviCross) {
}
@Override
public void hideCross() {
}
@Override
public void showModeCross(AMapModelCross aMapModelCross) {
}
@Override
public void hideModeCross() {
}
@Override
public void showLaneInfo(AMapLaneInfo[] aMapLaneInfos, byte[] bytes, byte[] bytes1) {
}
@Override
public void showLaneInfo(AMapLaneInfo aMapLaneInfo) {
}
@Override
public void hideLaneInfo() {
}
@Override
public void notifyParallelRoad(int i) {
}
@Override
public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo) {
}
@Override
public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos) {
}
@Override
public void OnUpdateTrafficFacility(TrafficFacilityInfo trafficFacilityInfo) {
}
@Override
public void updateAimlessModeStatistics(AimLessModeStat aimLessModeStat) {
}
@Override
public void updateAimlessModeCongestionInfo(AimLessModeCongestionInfo aimLessModeCongestionInfo) {
}
@Override
public void onPlayRing(int i) {
}
@Override
public void onCalculateRouteSuccess(AMapCalcRouteResult aMapCalcRouteResult) {
}
@Override
public void onCalculateRouteFailure(AMapCalcRouteResult aMapCalcRouteResult) {
}
@Override
public void onNaviRouteNotify(AMapNaviRouteNotifyData aMapNaviRouteNotifyData) {
}
}