Android 高德地图步行导航实现指南:详细代码和类结构
要实现 Android 高德地图的步行导航功能,你需要创建以下几个类:
- MainActivity.java:主活动类,用于显示地图和导航功能。
- MapUtils.java:地图工具类,用于初始化地图、定位等操作。
- 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 高德地图步行导航的实现。
原文地址: https://www.cveoy.top/t/topic/pgqP 著作权归作者所有。请勿转载和采集!