本文主要内容讲述从申请天地图开发授权到AndroidStudio3.0加载天地图官网快速入门Demo的整个过程。对于刚出入AndroidStudio和天地图开发的小白有一定的帮助。
1.申请天地图密钥Key
天地图官网(http://lbs.tianditu.gov.cn/)注册,申请个人开发者,登录控制台,创建Android应用程序。
1.1获取发布版SHA1
首先你要知道自己的AndroidStudio安装路径下的keytool.exe工具在哪,比如我的路径E:\Android\Android Studio\jre\bin\keytool.exe
之后Win+R →cmd→打开控制台,进入到E:\Android\Android Studio\jre\bin路径下
输入以下代码
keytool.exe -list -v -keystore [路径]
注意上述代码中间的空格,最后的路径是你的debug.keystore所在路径,windows系统,路径一般在
C:\Users\Administrator\.android\debug.keystore
完整代码:keytool.exe -list -v -keystore C:\Users\Administrator\.android\debug.keystore
回车
输入密钥:android
把SHA1中的内容写进1.1中。
1.2获取开发版SHA1
首先你要有一个安卓软件签名文件,AndroidStudio如何生成签名文件自行百度(给个链接),将生成的*****.jks文件路径记录下来。
还在刚才的控制台窗口,写以下代码:
keytool.exe -list -v -keystore [.jks路径]
比如我的路径这样写:
keytool.exe -list -v -keystore C:\Users\Administrator\AndroidStudioProjects\bdhapk.jks
输入密钥:你设置签名文件时的密码
回车
将此处的SHA1写在1.2处
1.3获取包名
这里指的是你用AndroidStudio创建的项目的包,可再项目配置文件AndroidManifest.xml中看到package="包名",复制过去写进1.3即可,比如
package="com.example.administrator.tiandituaddmap1">,此处的包名为com.example.administrator.tiandituaddmap1
2.添加天地图API包
下载API
解压以后,AndroidStudio切换Project目录,把.jar文件复制到项目的app\libs文件下,在app\src\main文件夹下新建jniLibs文件夹,必须是这个名字,要注意。将剩余的四个文件夹复制到jniLibs文件夹下,菜单栏-build-rebuild project。等待
如果你用的AndroidStudio编译版本在23以下,此时按照官网快速入门Demo即可实现天地图加载。
如果你的编译版本在23以上,需要再做一下处理。
3.动态获取权限
编译版本在23以上后,不仅要在AndroidManifest.xml文件中写入需要权限外,还需要再java代码中获取权限(敏感权限,在此不做区别,将权限在java中重新获取一遍),直接放代码,可对照自行修改。
package com.example.administrator.tiandituaddmap1;
import android.Manifest;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.tianditu.android.maps.GeoPoint;
import com.tianditu.android.maps.MapController;
import com.tianditu.android.maps.MapView;
public class MainActivity extends AppCompatActivity {
private MapView mapView;
//在API23+以上,不仅要在AndroidManifest.xml里面添加权限 还要在JAVA代码中请求权限:
// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.ACCESS_NETWORK_STATE,
Manifest.permission.ACCESS_WIFI_STATE,
Manifest.permission.INTERNET,
Manifest.permission.CALL_PHONE,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在加载布局之前获取所需权限
addpermission();
setContentView(R.layout.activity_main);
init();
}
public void addpermission(){
int permission = ActivityCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE);
}
}
public void init(){
new Thread(){
@Override
public void run() {
mapView=(MapView)findViewById(R.id.main_mapview);
//启用内置的地图缩放按钮
mapView.setBuiltInZoomControls(true);
//得到mapview的控制权,可以用它控制和驱动平移和缩放
MapController mapController=mapView.getController();
//用给定的经纬度构造一个GeoPoint,单位是微度(度*1E6)
GeoPoint point=new GeoPoint((int)(39.915*1E6),(int)(116.404*1E6));
//设置地图中心点
mapController.setCenter(point);
//设置地图等级
mapController.setZoom(12);;
}
}.start();
}
}
需要注意的一点是,权限的获取要放在加载布局文件之前。
至此,问题已被解决。可以运行程序,加载天地图。
结果如下图