出发地——目的地
获取蓝点(自己)经纬度
//TODO:获取自己的经纬度
start_la = aMap.getMyLocation().getLatitude();
start_lng = aMap.getMyLocation().getLongitude();
XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".Main3Activity">
<EditText
android:id="@+id/et_start"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="起始地" />
<EditText
android:id="@+id/et_end"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="目的地" />
<Button
android:id="@+id/btn_navi"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="开始导航" />
</LinearLayout>
java
package com.example.map;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;
import com.amap.api.services.core.PoiItem;
import com.amap.api.services.poisearch.PoiResult;
import com.amap.api.services.poisearch.PoiSearch;
import java.util.ArrayList;
public class Main3Activity extends AppCompatActivity {
private EditText etStart;
private EditText etEnd;
private Button btnNavi;
private double start_la,start_lng,end_la,end_lng;//起始点,目的地坐标
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
initView();
}
private void initView() {
etStart = (EditText) findViewById(R.id.et_start);
etEnd = (EditText) findViewById(R.id.et_end);
btnNavi = (Button) findViewById(R.id.btn_navi);
btnNavi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!etStart.getText().toString().trim().equals("")&&!etEnd.getText().toString().trim().equals("")){
Intent intent = new Intent(Main3Activity.this,Main2Activity.class);
intent.putExtra("start_la",start_la);
intent.putExtra("start_lng",start_lng);
intent.putExtra("end_la",end_la);
intent.putExtra("end_lng",end_lng);
startActivity(intent);
}
}
});
etStart.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//起始位置
start();
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//起始位置
start();
}
@Override
public void afterTextChanged(Editable s) {
//起始位置
start();
}
});
etEnd.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//结束位置
end();
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//结束位置
end();
}
@Override
public void afterTextChanged(Editable s) {
//结束位置
end();
}
});
}
private void end() {
final String end = etEnd.getText().toString().trim();
PoiSearch.Query query = new PoiSearch.Query(end, "", "");
//keyWord表示搜索字符串,
//第二个参数表示POI搜索类型,二者选填其一,选用POI搜索类型时建议填写类型代码,码表可以参考下方(而非文字)
//cityCode表示POI搜索区域,可以是城市编码也可以是城市名称,也可以传空字符串,空字符串代表全国在全国范围内进行搜索
query.setPageSize(10);// 设置每页最多返回多少条poiitem
query.setPageNum(1);//设置查询页码
PoiSearch poiSearch = new PoiSearch(this, query);
poiSearch.setOnPoiSearchListener(new PoiSearch.OnPoiSearchListener() {
@Override
public void onPoiSearched(PoiResult poiResult, int i) {
if(poiResult != null && i ==1000){
ArrayList<PoiItem> pois = poiResult.getPois();
if(pois.size()>0){
end_la = pois.get(0).getLatLonPoint().getLatitude();
end_lng = pois.get(0).getLatLonPoint().getLongitude();
Log.d("---", "end:"+end_la+"---"+end_lng);
}
}
}
@Override
public void onPoiItemSearched(PoiItem poiItem, int i) {
}
});
poiSearch.searchPOIAsyn();
}
private void start() {
String start = etStart.getText().toString().trim();
PoiSearch.Query query = new PoiSearch.Query(start, "", "");
query.setPageSize(10);// 设置每页最多返回多少条poiitem
query.setPageNum(1);//设置查询页码
PoiSearch poiSearch = new PoiSearch(this, query);
poiSearch.setOnPoiSearchListener(new PoiSearch.OnPoiSearchListener() {
@Override
public void onPoiSearched(PoiResult poiResult, int i) {
if(poiResult != null && i ==1000){
ArrayList<PoiItem> pois = poiResult.getPois();
if(pois.size()>0){
start_la = pois.get(0).getLatLonPoint().getLatitude();
start_lng = pois.get(0).getLatLonPoint().getLongitude();
Log.d("---", "start:"+start_la+"---"+start_lng);
}
}
}
@Override
public void onPoiItemSearched(PoiItem poiItem, int i) {
}
});
poiSearch.searchPOIAsyn();
}
}
导航界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".Main2Activity">
<com.amap.api.navi.AMapNaviView
android:id="@+id/navi_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
java
package com.example.map;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
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.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;
import java.util.List;
public class Main2Activity extends AppCompatActivity implements AMapNaviViewListener, AMapNaviListener {
private AMapNaviView naviView;
private AMapNavi mAMapNavi;
private List<NaviLatLng> sList = new ArrayList<>();//起始经纬度
private List<NaviLatLng> eList = new ArrayList<>();//结束经纬度
private double start_la,start_lng,end_la,end_lng;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
//TODO 0:起点和终点
start_la = getIntent().getDoubleExtra("start_la",0);
start_lng = getIntent().getDoubleExtra("start_lng",0);
end_la = getIntent().getDoubleExtra("end_la",0);
end_lng = getIntent().getDoubleExtra("end_lng",0);
sList.add(new NaviLatLng(start_la,start_lng));
eList.add(new NaviLatLng(end_la,end_lng));
//TODO 1:获取 AMapNaviView 实例
naviView = (AMapNaviView) findViewById(R.id.navi_view);
naviView.setAMapNaviViewListener(this);//点击导航地图X 关闭导航
naviView.onCreate(savedInstanceState);
//TODO 2:获取AMapNavi实例
mAMapNavi = AMapNavi.getInstance(getApplicationContext());
//添加监听回调,用于处理算路成功
mAMapNavi.addAMapNaviListener(this);//计算路径 开始导航
mAMapNavi.setUseInnerVoice(true);//设置声音
}
@Override
protected void onDestroy() {
super.onDestroy();
naviView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
naviView.onResume();
}
@Override
protected void onPause() {
super.onPause();
naviView.onPause();
}
@Override
public void onNaviSetting() {
}
//点击取消
@Override
public void onNaviCancel() {
finish();
}
@Override
public boolean onNaviBackClick() {
return false;
}
@Override
public void onNaviMapMode(int i) {
}
@Override
public void onNaviTurnClick() {
}
@Override
public void onNextRoadClick() {
}
@Override
public void onScanViewButtonClick() {
}
@Override
public void onLockMap(boolean b) {
}
@Override
public void onNaviViewLoaded() {
}
@Override
public void onMapTypeChanged(int i) {
}
@Override
public void onNaviViewShowMode(int i) {
}
@Override
public void onInitNaviFailure() {
}
//初始化成功-->开始计算路径
@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();
}
mAMapNavi.calculateDriveRoute(sList, eList, null, strategy);
}
@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 onCalculateRouteSuccess(int[] ints) {
mAMapNavi.startNavi(NaviType.GPS);
}
@Override
public void notifyParallelRoad(int i) {
}
@Override
public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos) {
}
@Override
public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo) {
}
@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) {
}
}