本文参考腾讯位置服务官方文档:Android地图SDK | 腾讯位置服务 (qq.com)
腾讯位置服务地图SDK(Android)是一套基于Android 4.3及以上版本的多种地理位置服务的应用程序接口。 通过调用该接口,您可以轻松访问腾讯地图服务和数据,构建功能丰富、交互性强、契合各种行业场景的地图类应用程序。也可以在自己的Android应用中加入地图相关的功能,包括:地图展示、标注、绘制图形等。
支持Android 4.3及以上系统。

在AndroidManifest.xml的application标签中配置key
<application>
...
<meta-data android:name="TencentMapSDK" android:value="您申请的Key" />
</application>
方法1:主动添加SDK
将jar放在libs目录下

右键该jar包,选择Add AS Library,弹出窗口选择确定

变成下图所示为导入成功

将jni目录下的所有文件按照原目录格式,拷贝到AndroidStudio项目对应的 app/src/main/jniLibs/ 目录下:


方法2:Gradle配置maven或jcenter仓库集成SDK
在 Project 的 build.gradle 文件中配置 repositories,添加 maven 或 jcenter仓库地址。AndroidStudio 默认会在 Project 的 build.gradle 为所有module自动添加 jcenter 仓库地址,如果已存在,则不需要重复添加:
buildscript {
repositories {
google()
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:版本'
}
}
//向所有模块配置仓库:
allprojects {
repositories {
google()
jcenter()
mavenCentral()
}
}
在 build.gradle 文件的 dependencies 中增加配置
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.tencent.map:tencent-map-vector-sdk:版本号'
如果需要混淆工程,在module里找到proguard-rules.pro文件,添加如下混淆脚本:
-keep public class com.tencent.lbssearch.** {
*;}
-keep public class com.tencent.map.** {
*;}
-keep public class com.tencent.mapsdk.** {
*;}
-keep public class com.tencent.tencentmap.**{
*;}
-keep public class com.tencent.tmsbeacon.**{
*;}
-keep public class com.tencent.tmsbeacon.**{
*;}
-dontwarn com.qq.**
-dontwarn com.tencent.**
地图SDK需要使用网络,访问硬件存储等系统权限,在AndroidManifest.xml文件里,添加如下权限:
请在manifest文件下配置如下权限:
<uses-permission android:name="android.permission.INTERNET"/>
<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"/>
地图视图:
- MApView:普通地图视图
- TextureMapView:纹理化地图视图
- MapRenderLayer:地图渲染层容器
差异:
| 视图类型 | 内部实现 | 视图动画 | 性能 | ListView显示 | 多实例 |
|---|---|---|---|---|---|
| MapView | GLSurfaceView | 不支持 | 高 | 不流畅 | 支持 |
| TextureMapView | TextureView | 支持 | 中 | 不流畅 | 支持 |
| MapRenderLayer | Surface+GLThread | 外部控制 | 外部控制 | 流畅 | 支持 |
绑定地图生命周期:创建地图视图后,需要绑定应用生命周期,以保障地图在应用的不同生命周期中能正确处理显示和刷新逻辑。
| 应用生命周期 | 地图生命周期 |
|---|---|
| onStart() | onStart() |
| onResume() | onResume() |
| onPause() | onPause() |
| onStop() | onStop() |
| onDestory() | onDestory() |
基础地图布局
<androidx.constraintlayout.widget.ConstraintLayout 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=".BaseMapActivity">
<com.tencent.tencentmap.mapsdk.maps.TextureMapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
androidx.constraintlayout.widget.ConstraintLayout>
创建基础地图的activity
public class BaseMapActivity extends AppCompatActivity {
private TextureMapView mapView;
private TencentMap tencentMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base_map);
TencentMapInitializer.setAgreePrivacy(true);
mapView = findViewById(R.id.mapView);
tencentMap = mapView.getMap();
}
/**
* mapview的生命周期管理
*/
@Override
protected void onStart() {
super.onStart();
mapView.onStart();
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onStop() {
super.onStop();
mapView