最近项目中需要使用天地图的项目。因为项目需求必须使用天地图来显示,这里对踩过的坑和开发做一个总结:
效果图如下:
1:首先注册天地图的账号,这个不用过多介绍。
2:找到个人界面,创建一个新应用,目的是获取天地图的key,从2019年1月1日开始需要用户注册才能获取key。
3:用户创建新应用的时候会让我们填入应用的SHAI值,我们打开Androidstudio找到我们任意一个有签名的项目,
如果没有可以自己设置一个签名,然后输入如下命令,其中打码的是我本地应用的签名文件名,这里就不展示了:
然后输入密码,就是我们签名的密码,SHAI就出来了,然后填入需要申请的填入发布版SHA1和开发版SHA1就可以了。
4:地图key申请好了然后在相关下载----->移动API开发包(找到最新的)下载解压出来。
5:找到解压文件夹打开:如下标1的部分和标2的部分放到下面对应的文件夹下
放入Androidstudio的如下目录下的界面显示如下:
6:在AndroidManifest中添加如下权限:
在Application节点下添加如下,其中value就是我们申请的key:
7:新建界面Java代码如下:
package com.example.andyyuan.apnapplication;
import android.Manifest;
import android.content.pm.PackageManager;
import android.graphics.Point;
import android.location.Location;
import android.location.LocationListener;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
import com.tianditu.android.maps.GeoPoint;
import com.tianditu.android.maps.MapController;
import com.tianditu.android.maps.MapView;
import com.tianditu.android.maps.MyLocationOverlay;
import com.tianditu.android.maps.overlay.MarkerOverlay;
import java.util.ArrayList;
import java.util.List;
public class OpenTiandituActivity extends AppCompatActivity {
private MapView mMapView;
private MyLocationOverlay myLocationOverlay;
private GeoPoint mPoint;
private List permissionList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_open_tianditu);
queryPermission();
mMapView = (MapView) findViewById(R.id.open_tianditu_view);
myLocationOverlay = new MyLocationOverlay(this, mMapView);
initData();
}
private void queryPermission() {
if (ContextCompat.checkSelfPermission(OpenTiandituActivity.this,
Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);
}
if (ContextCompat.checkSelfPermission(OpenTiandituActivity.this,
Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);
}
if (ContextCompat.checkSelfPermission(OpenTiandituActivity.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);
}
if (!permissionList.isEmpty()) {
String[] permissions = permissionList.toArray(new String[permissionList.size()]);
ActivityCompat.requestPermissions(OpenTiandituActivity.this, permissions, 1);
}
}
private void initData() {
//设置启用内置的缩放控件
//mMapView.setBuiltInZoomControls(true);
//得到mMapView的控制权,可以用它控制和驱动平移和缩放
MapController mMapController = mMapView.getController();
//用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6),之前的测试的一个地理位置显示
//GeoPoint point = new GeoPoint((int) (31.127 * 1E6), (int) (121.531 * 1E6));
//设置地图zoom级别
mMapController.setZoom(16);
//启用指南针位置更新
myLocationOverlay.enableCompass();
//启用我的位置
myLocationOverlay.enableMyLocation();
mMapView.addOverlay(myLocationOverlay);
//获得当前位置
mPoint = myLocationOverlay.getMyLocation();
// //设置地图中心点
mMapController.setCenter(mPoint);
//动画移动到当前位置
mMapController.animateTo(mPoint);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,
int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults.length > 0) {
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "必须同意所有权限才能使用", Toast.LENGTH_SHORT).show();
finish();
return;
}
}
} else {
Toast.makeText(this, "发生未知错误", Toast.LENGTH_SHORT).show();
finish();
}
break;
default:
break;
}
}
//地理位置变化的监听
LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
Toast.makeText(OpenTiandituActivity.this, "地理位置已经发生变化", Toast.LENGTH_SHORT).show();
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
};
}
8.布局文件中只有如下:
然后点击运行,OK!
***************************************************发现了问题**********************************************************
在低版本的手机上倒是没有啥问题,在Android高于5.0版本上出现未知错误的闪退问题,最终定位解决了
只需要在targetSdkVersion 版本上改低一点,如19,就可以了