用android stdio写一个导航,写出java代码
时间: 2023-08-04 15:33:24 浏览: 51
这里给您提供一个简单的Android Studio导航应用的Java代码示例,主要实现了地图显示和路径规划功能。由于需要使用地图SDK和导航SDK,代码中只提供了简单的调用方法,您需要自行添加相应的SDK。
```java
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.amap.api.maps.AMap;
import com.amap.api.maps.MapView;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.navi.AMapNavi;
import com.amap.api.navi.AMapNaviListener;
import com.amap.api.navi.enums.NaviType;
import com.amap.api.navi.model.NaviLatLng;
import com.amap.api.navi.model.RoutePlanResult;
import com.amap.api.navi.model.WalkRouteResult;
import com.amap.api.navi.view.RouteOverLay;
import java.util.ArrayList;
import java.util.List;
public class NavigationActivity extends AppCompatActivity implements AMapNaviListener {
// 地图和导航的控制器
private MapView mapView;
private AMap aMap;
private AMapNavi aMapNavi;
// 起点和终点的经纬度坐标
private NaviLatLng startLatlng = new NaviLatLng(39.993291, 116.473188);
private NaviLatLng endLatlng = new NaviLatLng(39.908791, 116.397034);
// 路径规划结果
private RouteOverLay routeOverLay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_navigation);
mapView = findViewById(R.id.map_view);
mapView.onCreate(savedInstanceState);
initMap();
initNavi();
initUI();
}
private void initMap() {
if (aMap == null) {
aMap = mapView.getMap();
aMap.moveCamera(CameraUpdateFactory.zoomTo(15));
aMap.addMarker(new MarkerOptions().position(new LatLng(startLatlng.getLatitude(),
startLatlng.getLongitude())).title("起点"));
aMap.addMarker(new MarkerOptions().position(new LatLng(endLatlng.getLatitude(),
endLatlng.getLongitude())).title("终点"));
}
}
private void initNavi() {
aMapNavi = AMapNavi.getInstance(getApplicationContext());
aMapNavi.addAMapNaviListener(this);
}
private void initUI() {
Button btnStartNavi = findViewById(R.id.btn_start_navi);
btnStartNavi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startNavi();
}
});
}
private void startNavi() {
List<NaviLatLng> endList = new ArrayList<>();
endList.add(endLatlng);
aMapNavi.calculateWalkRoute(startLatlng, endList, null);
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
aMapNavi.destroy();
}
@Override
public void onInitNaviFailure() {
Toast.makeText(this, "初始化导航失败", Toast.LENGTH_SHORT).show();
}
@Override
public void onInitNaviSuccess() {
Toast.makeText(this, "初始化导航成功", Toast.LENGTH_SHORT).show();
}
@Override
public void onCalculateRouteSuccess(RoutePlanResult routePlanResult) {
if (routeOverLay != null) {
routeOverLay.removeFromMap();
}
routeOverLay = new RouteOverLay(aMap, routePlanResult.getPaths().get(0), this);
routeOverLay.addToMap();
routeOverLay.zoomToSpan(50);
}
@Override
public void onCalculateRouteFailure(RoutePlanResult routePlanResult) {
Toast.makeText(this, "路径规划失败", Toast.LENGTH_SHORT).show();
}
@Override
public void onNaviInfoUpdate(NaviInfo naviInfo) {
}
@Override
public void onNaviInfoUpdated(AMapNaviInfo aMapNaviInfo) {
}
@Override
public void onLocationChange(AMapNaviLocation aMapNaviLocation) {
}
@Override
public void onArriveDestination(boolean b) {
}
@Override
public void onStartNavi(int i) {
Toast.makeText(this, "开始导航", Toast.LENGTH_SHORT).show();
}
@Override
public void onEndEmulatorNavi() {
}
@Override
public void onArrivedWayPoint(int i) {
}
@Override
public void onGpsOpenStatus(boolean b) {
}
@Override
public void onNaviInfoUpdate(NaviInfo[] naviInfos) {
}
@Override
public boolean onNaviBackClick() {
return false;
}
@Override
public void onNaviCancel() {
}
@Override
public void onNaviMapMode(int i) {
}
@Override
public void onNaviTurnClick() {
}
@Override
public void onNextRoadClick() {
}
@Override
public void onScanViewButtonClick() {
}
@Override
public void onNaviViewLoaded() {
}
@Override
public void onMapTypeChanged(int i) {
}
@Override
public void onNaviViewShowMode(int i) {
}
@Override
public boolean onNaviBackClick(int i) {
return false;
}
@Override
public void onPointerCaptureChanged(boolean hasCapture) {
}
}
```
以上代码中,initMap()方法初始化地图控件,initNavi()方法初始化导航控制器,initUI()方法初始化UI控件,startNavi()方法开始路径规划和导航操作。onInitNaviSuccess()方法和onInitNaviFailure()方法分别在导航初始化成功和失败时被调用,onCalculateRouteSuccess()方法和onCalculateRouteFailure()方法分别在路径规划成功和失败时被调用。在实际应用中,您需要根据需求调整代码和添加其他相关功能。