androidstudio腾讯地图集成定位绘制行走过的路线

本文详细介绍如何在Android项目中集成腾讯地图,并实现位置定位及路线绘制功能。内容包括申请Key、配置文件、添加权限、地图视图设置、定位监听与路线绘制等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前项目中集成的是百度地图,然后后面需求改了换成腾讯地图了,个人感觉腾讯地图比百度地图更容易集成,但是腾讯的API文档看着费劲,下面就看一下腾讯地图的流程

一、首先肯定去官方申请key和下载官方demo,这个不多说

然后在配置文件中application下加上

<meta-data
    android:name="TencentMapSDK"
    android:value="申请到的key"/>
二,jar包和so文件

从腾讯地图开放平台下载的demo中获取到jar包和so文件,将jar包复制到libs文件夹下,然后add as Library..,so文件处理是在main文件夹下建一个jniLibs,so文件拷贝到文件夹下


三,添加权限

包括访问jps,网络,网络定位等

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

<!-- 通过GPS得到精确位置 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 通过网络得到粗略位置 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 修改WiFi状态. 发起WiFi扫描, 需要WiFi信息用于网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 访问网络的变化, 需要某些信息用于网络定位 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />


四.配置文件

这是xml文件中

<com.tencent.tencentmap.mapsdk.maps.MapView
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

这样的话在自己项目中就能看到地图可以显示了

五.下面看java文件中的代码


mMapView = (MapView) findViewById(R.id.map);
tencentMap = mMapView.getMap();
//设置地图类型为卫星图
tencentMap.setMapType(TencentMap.MAP_TYPE_SATELLITE);

看名字,mapview肯定是view控制器,而Tencentmap类是地图的主类

下面看定位然后把定位到的经纬度存储到集合中,然后将点的集合在地图上添加polyline画出路线



//定位资源
private DemoLocationSource locationSource;
/**
 *在地图中设置定位资源,保证定位参数传入地图中
 */
//设置显示缩放控件
tencentMap.getUiSettings().setZoomControlsEnabled(false);

locationSource = new DemoLocationSource(this);
//设置我的位置信息来源
tencentMap.setLocationSource(locationSource);
//设置是否显示我的位置
tencentMap.setMyLocationEnabled(true);

/**
 * 腾讯地图定位类,并定位到当前位置,保存时时定位到的点
 */
class DemoLocationSource implements LocationSource, TencentLocationListener {

    private Context mContext;
    private OnLocationChangedListener mChangedListener;
    private TencentLocationManager locationManager;
    private TencentLocationRequest locationRequest;

    public DemoLocationSource(Context context) {
        mContext = context;
        locationManager = TencentLocationManager.getInstance(mContext);
        locationRequest = TencentLocationRequest.create();
        locationRequest.setInterval(4000);        //请求周期
    }

    @Override
    public void onLocationChanged(TencentLocation tencentLocation, int i, String s) {
        if (i == TencentLocation.ERROR_OK && mChangedListener != null) {
            Log.e("maplocation", "location: " + tencentLocation.getCity() + " " + tencentLocation.getProvider());

            Log.e("当前的点坐标****", "aaaaaaaaaaaa: " + tencentLocation.getLatitude() + " " + tencentLocation.getLongitude());

            //当前点
            LatLng latLng = new LatLng(tencentLocation.getLatitude(),tencentLocation.getLongitude());


            Location location = new Location(tencentLocation.getProvider());
            location.setLatitude(tencentLocation.getLatitude());
            location.setLongitude(tencentLocation.getLongitude());
            location.setAccuracy(tencentLocation.getAccuracy());



            //定位到当前位置并且设置缩放级别
            tencentMap.animateCamera(CameraUpdateFactory.newLatLng(new LatLng(tencentLocation.getLatitude(),tencentLocation.getLongitude())));

            if(isStart) {
                if(lalangList.size() == 0) {
                    lalangList.add(latLng);
                }else {
                    if(lalangList.get(lalangList.size()-1).latitude == latLng.latitude && lalangList.get(lalangList.size()-1).longitude == latLng.longitude) {

                    }else {
                        lalangList.add(latLng);
                    }
                }
            }

            mChangedListener.onLocationChanged(location);
        }
    }

    @Override
    public void onStatusUpdate(String arg0, int arg1, String arg2) {

    }

    @Override
    public void activate(OnLocationChangedListener arg0) {
        mChangedListener = arg0;
        int err = locationManager.requestLocationUpdates(locationRequest, this);
        switch (err) {
            case 1:
                setTitle("设备缺少使用腾讯定位服务需要的基本条件");
                break;
            case 2:
                setTitle("manifest 中配置的 key 不正确");
                break;
            case 3:
                setTitle("自动加载libtencentloc.so失败");
                break;

            default:
                break;
        }
    }

    @Override
    public void deactivate() {
        // TODO Auto-generated method stub
        locationManager.removeUpdates(this);
        mContext = null;
        locationManager = null;
        locationRequest = null;
        mChangedListener = null;
    }

    public void onPause() {
        locationManager.removeUpdates(this);
    }

    public void onResume() {
        locationManager.requestLocationUpdates(locationRequest, this);
    }

}





获取到的定位点集合后就是画了,可以自己设置几秒绘制一次

if(lalangList.size() >= 2) {
    PolylineOptions polyline = new PolylineOptions();
    polyline.width(8).color(0xAAFF0000).setLatLngs(lalangList);
    tencentMap.addPolyline(polyline);
}



想要其他功能或具体细节请详细参考腾讯地图官方文档和API




### 如何在Android Studio中使用腾讯地图API #### 配置环境 为了在 Android Studio 中集成并使用腾讯地图 API,需要完成以下几个方面的设置: 1. **安装 Android Studio 并配置 SDK** 安装 Android Studio 是第一步。可以参考详细的安装教程来下载适合的操作系统版本[^3]。确保指定本机上的 Android Studio 和 Android SDK 的路径,特别是在 Windows 系统上需要注意默认的安装目录位置[^1]。 2. **创建新项目** 打开 Android Studio 后,新建一个 Android 项目。选择合适的模板(如 Empty Activity),填写必要的信息(包名、最低支持的 Android 版本等)。 #### 获取腾讯地图 API Key 要使用腾讯地图功能,必须先获取 API 密钥: 1. 创建应用 登录到 [腾讯位置服务](https://lbs.qq.com/) 控制台,按照指引创建一个新的应用,并记录下生成的应用 ID 和对应的密钥 (Key)[^2]。 2. 绑定签名证书指纹 腾讯地图 API 需要绑定 SHA-1 或 MD5 签名证书指纹才能正常工作。可以通过以下命令生成调试模式下的签名证书指纹: ```bash keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android ``` #### 添加依赖项 编辑项目的 `build.gradle` 文件,在模块级别的文件中添加腾讯地图 SDK 的 Maven 仓库地址以及相应的依赖库: ```gradle repositories { maven { url 'http://map.sdk.qcloud.com/nexus/repository/android-sdk/' } } dependencies { implementation 'com.tencent.map:map-sdk:<latest_version>' } ``` 注意替换 `<latest_version>` 为最新发布的版本号。具体版本可以在腾讯官方文档中查询[^2]。 如果同步过程中遇到问题,可参照相关解决方法调整网络设置或清理缓存数据[^4]。 #### 初始化地图控件 在布局 XML 文件中定义 MapView 控件实例: ```xml <com.tencent.mapsdk.raster.view.MapView xmlns:map="http://schemas.android.com/apk/res-auto" android:id="@+id/map_view" android:layout_width="match_parent" android:layout_height="match_parent"/> ``` 接着初始化该视图组件于 Java/Kotlin 源码里: ```java MapView mapView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mapView = findViewById(R.id.map_view); mapView.onCreate(savedInstanceState); // 此方法必须调用 initMap(); } private void initMap() { TencentLocationManager locationManager = TencentLocationManager.getInstance(this); // 设置您的 API KEY MapsInitializer.setApiKey("YOUR_API_KEY"); } ``` 最后记得重写生命周期回调函数以管理资源释放等问题: ```java @Override protected void onDestroy() { super.onDestroy(); mapView.onDestroy(); } @Override protected void onPause() { super.onPause(); mapView.onPause(); } @Override protected void onResume() { super.onResume(); mapView.onResume(); } ``` 通过以上步骤即可实现基本的地图展示效果。更多高级特性比如定位路线规划等功能则需进一步查阅腾讯官方文档学习其接口调用方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值