本文主要內容講述從申請天地圖開(kāi)發(fā)授權到AndroidStudio3.0加載天地圖官網(wǎng)快速入門(mén)Demo的整個(gè)過(guò)程。對于剛出入AndroidStudio和天地圖開(kāi)發(fā)的小白有一定的幫助。
1.申請天地圖密鑰Key
天地圖官網(wǎng)(http://lbs.tianditu.gov.cn/)注冊,申請個(gè)人開(kāi)發(fā)者,登錄控制臺,創(chuàng )建Android應用程序。
1.1獲取發(fā)布版SHA1
首先你要知道自己的AndroidStudio安裝路徑下的keytool.exe工具在哪,比如我的路徑E:\Android\Android Studio\jre\bin\keytool.exe
之后Win+R →cmd→打開(kāi)控制臺,進(jìn)入到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
回車(chē)
輸入密鑰:android
把SHA1中的內容寫(xiě)進(jìn)1.1中。
1.2獲取開(kāi)發(fā)版SHA1
首先你要有一個(gè)安卓軟件簽名文件,AndroidStudio如何生成簽名文件自行百度(給個(gè)鏈接),將生成的*****.jks文件路徑記錄下來(lái)。
還在剛才的控制臺窗口,寫(xiě)以下代碼:
keytool.exe -list -v -keystore [.jks路徑]
比如我的路徑這樣寫(xiě):
keytool.exe -list -v -keystore C:\Users\Administrator\AndroidStudioProjects\bdhapk.jks
輸入密鑰:你設置簽名文件時(shí)的密碼
回車(chē)
將此處的SHA1寫(xiě)在1.2處
1.3獲取包名
這里指的是你用AndroidStudio創(chuàng )建的項目的包,可再項目配置文件AndroidManifest.xml中看到package="包名",復制過(guò)去寫(xiě)進(jìn)1.3即可,比如
package="com.example.administrator.tiandituaddmap1">,此處的包名為com.example.administrator.tiandituaddmap1
2.添加天地圖API包
下載API
解壓以后,AndroidStudio切換Project目錄,把.jar文件復制到項目的app\libs文件下,在app\src\main文件夾下新建jniLibs文件夾,必須是這個(gè)名字,要注意。將剩余的四個(gè)文件夾復制到j(luò )niLibs文件夾下,菜單欄-build-rebuild project。等待
如果你用的AndroidStudio編譯版本在23以下,此時(shí)按照官網(wǎng)快速入門(mén)Demo即可實(shí)現天地圖加載。
如果你的編譯版本在23以上,需要再做一下處理。
3.動(dòng)態(tài)獲取權限
編譯版本在23以上后,不僅要在A(yíng)ndroidManifest.xml文件中寫(xiě)入需要權限外,還需要再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;
- //在A(yíng)PI23+以上,不僅要在A(yíng)ndroidManifest.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的控制權,可以用它控制和驅動(dòng)平移和縮放
- MapController mapController=mapView.getController();
- //用給定的經(jīng)緯度構造一個(gè)GeoPoint,單位是微度(度*1E6)
- GeoPoint point=new GeoPoint((int)(39.915*1E6),(int)(116.404*1E6));
- //設置地圖中心點(diǎn)
- mapController.setCenter(point);
- //設置地圖等級
- mapController.setZoom(12);;
- }
- }.start();
- }
- }
需要注意的一點(diǎn)是,權限的獲取要放在加載布局文件之前。
至此,問(wèn)題已被解決??梢赃\行程序,加載天地圖。
結果如下圖

聯(lián)系客服