要实现 Android 高德地图的步行导航功能,你需要创建以下几个类:

  1. MainActivity.java:主活动类,用于显示地图和导航功能。
  2. MapUtils.java:地图工具类,用于初始化地图、定位等操作。
  3. NavigationUtils.java:导航工具类,用于进行步行导航的相关操作。

下面是每个类的详细实现代码:

MainActivity.java:

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import com.amap.api.maps.AMap;
import com.amap.api.maps.MapView;

public class MainActivity extends AppCompatActivity {
    private MapView mMapView;
    private AMap mAMap;
    private Button mStartNavigationButton;

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

        // 初始化地图
        mMapView = findViewById(R.id.map_view);
        mMapView.onCreate(savedInstanceState);
        mAMap = mMapView.getMap();

        // 检查定位权限
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
        }

        // 设置导航按钮点击事件
        mStartNavigationButton = findViewById(R.id.start_navigation_button);
        mStartNavigationButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                NavigationUtils.startNavigation(MainActivity.this);
            }
        });
    }

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

    @Override
    protected void onPause() {
        super.onPause();
        mMapView.onPause();
    }

    @Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        mMapView.onSaveInstanceState(outState);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mMapView.onDestroy();
    }
}

activity_main.xml:

<?xml version='1.0' encoding='utf-8'?>
<RelativeLayout 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'
    tools:context='.MainActivity'>

    <com.amap.api.maps.MapView
        android:id='@+id/map_view'
        android:layout_width='match_parent'
        android:layout_height='match_parent' />

    <Button
        android:id='@+id/start_navigation_button'
        android:layout_width='wrap_content'
        android:layout_height='wrap_content'
        android:layout_alignParentBottom='true'
        android:layout_centerHorizontal='true'
        android:layout_marginBottom='16dp'
        android:text='开始导航' />

</RelativeLayout>

MapUtils.java:

import android.content.Context;

import com.amap.api.maps.MapView;
import com.amap.api.maps.model.MyLocationStyle;

public class MapUtils {
    public static void initMap(Context context, MapView mapView) {
        mapView.onCreate(null);
        mapView.getMap().setMyLocationEnabled(true);
        MyLocationStyle myLocationStyle = new MyLocationStyle();
        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);
        mapView.getMap().setMyLocationStyle(myLocationStyle);
    }
}

NavigationUtils.java:

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.widget.Toast;

public class NavigationUtils {
    public static void startNavigation(Context context) {
        // 检查是否安装了高德地图
        if (isInstalled(context)) {
            // 打开高德地图进行导航
            Uri uri = Uri.parse('androidamap://route?sourceApplication=appname&dlat=39.98871&dlon=116.43234&dname=目的地');
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            intent.addCategory(Intent.CATEGORY_DEFAULT);
            intent.setPackage('com.autonavi.minimap');
            context.startActivity(intent);
        } else {
            Toast.makeText(context, '请安装高德地图', Toast.LENGTH_SHORT).show();
        }
    }

    private static boolean isInstalled(Context context) {
        try {
            context.getPackageManager().getPackageInfo('com.autonavi.minimap', 0);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
            return false;
        }
    }
}

请注意,上述代码中的地图控件(MapView)是使用高德地图SDK提供的,你需要在项目的build.gradle文件中添加以下依赖:

implementation 'com.amap.api:3dmap:5.5.0'

另外,记得在AndroidManifest.xml文件中添加以下权限:

<uses-permission android:name='android.permission.ACCESS_FINE_LOCATION' />
<uses-permission android:name='android.permission.ACCESS_COARSE_LOCATION' />

这样就完成了 Android 高德地图步行导航的实现。

Android 高德地图步行导航实现指南:详细代码和类结构

原文地址: https://www.cveoy.top/t/topic/pgqP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录