前言:看了很多前辈的博客,发现写博客是很好的一种方式来记录开发过程中的点滴,同时也可以帮助别人更好的去进行某一方面的开发,也可以作为一种笔记,让自己在以后开发的过程中可以回忆下之前的写好和不足之处,文笔有点烂,废话不多说,开始我的博客之旅!
一、申请高德地图账号
这种就不用多说了,进入网站申请注册账号就行了。
1.1 申请KEY
这一点是非常重要的,之前在进行百度地图开始时,就被这个key值弄得有点麻烦,因为key值的申请需要SHA1,听我慢慢道来。
首先就是注册登录后,点击右上角控制台进入控制台,创建自己的新应用吧。

接下来就是添加key了,注意了,重点,很容易弄错的地方就是这里,点击添加新key试试吧。

SHA1这就是我上述所说的了,你可以通过打开eclipse,菜单栏上有Window,打开其中的prefrences →Android→Build

复制粘贴就行了,至于Package 只要打开这个AndroidManifest.xml,没错,就是那个包名,是它,是它,就是它。
1.2 配置一下吧,不然有啥用
相信现在你应该已经创建好了吧,不用给我看,我也看不懂,没错,就是那一大串啥子东西都不知道的字符串。继续复制过来,打开你的AndroidManifest.xml,在你的application里面加上这几句吧!
<!-- 定位需要的服务 使用2.0的定位需要加上这个 -->
<service android:name="com.amap.api.location.APSService" >
</service>
<service android:name="com.amap.api.location.APSService" >
</service>
<meta-data
android:name="com.amap.api.v2.apikey"
android:value=" 你的一大串就放这了,别跑偏了 " />
粘贴key值前多注意你的SHA1和包名对不对啊,不然,你会哭的!
android:name="com.amap.api.v2.apikey"
android:value=" 你的一大串就放这了,别跑偏了 " />
粘贴key值前多注意你的SHA1和包名对不对啊,不然,你会哭的!
准备工作好了吗,不,还差这个 → → →
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
没错,就是权限!!!千万别忘了,别少了。
二、是不是该显示地图了
2.1 不就是给你个地盘嘛,拿去呗
其实吧,很多东西高德给的demo里面源码都有,但是我就是喜欢再写一遍!
创建你的Activity,你的布局,然后在布局里加上这个 →
<com.amap.api.maps.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</com.amap.api.maps.MapView>
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</com.amap.api.maps.MapView>
我的地盘我做主,地图就在这落脚了,就是这么霸道。
好像忘了什么东西了,jar包呢,藏拿去了,找不到,那就去高德的demo里复制粘贴吧,这都是小事情。可要记得别丢三落四的。
2.2 接下来就是 Activity 了
public class GaodeMapActivity extends Activity implements LocationSource,
AMapLocationListener, OnMapClickListener, OnMapLongClickListener,
OnCameraChangeListener, OnMapTouchListener, OnMarkerClickListener {
private AMap aMap;
private MapView mapView;
private OnLocationChangedListener mListener;
private AMapLocationClient mlocationClient;
private AMapLocationClientOption mLocationOption;
LatLng desLatLng;
CoordinateConverter converter;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.gaodemap);
mapView = (MapView) findViewById(R.id.map);
mapView.onCreate(savedInstanceState);// 此方法必须重写
init();
aMap.setOnMapClickListener(this);// 对amap添加单击地图事件监听器
aMap.setOnMapLongClickListener(this);// 对amap添加长按地图事件监听器
aMap.setOnCameraChangeListener(this);// 对amap添加移动地图事件监听器
aMap.setOnMapTouchListener(this);// 对amap添加触摸地图事件监听器
aMap.setOnMarkerClickListener(this);
}
/**
* 初始化
*/
private void init() {
if (aMap == null) {
aMap = mapView.getMap();
setUpMap();
}
}
/**
* 设置一些amap的属性
*/
private void setUpMap() {
aMap.setLocationSource(this);// 设置定位监听
aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示
aMap.getUiSettings().setScaleControlsEnabled(true);
// 设置中心点和缩放比例
aMap.moveCamera(CameraUpdateFactory.zoomTo(14));
aMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
// 设置定位的类型为定位模式 ,可以由定位、跟随或地图根据面向方向旋转几种
aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);
}
/**
* 方法必须重写
*/
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
/**
* 方法必须重写
*/
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
deactivate();
}
/**
* 方法必须重写
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
/**
* 方法必须重写
*/
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
if (null != mlocationClient) {
mlocationClient.onDestroy();
}
}
/**
* 定位成功后回调函数
*/
@Override
public void onLocationChanged(AMapLocation amapLocation) {
if (mListener != null && amapLocation != null) {
if (amapLocation != null && amapLocation.getErrorCode() == 0) {
mListener.onLocationChanged(amapLocation);// 显示系统小蓝点
} else {
String errText = "定位失败," + amapLocation.getErrorCode() + ": "
+ amapLocation.getErrorInfo();
Log.e("AmapErr", errText);
}
}
}
/**
* 激活定位
*/
@Override
public void activate(OnLocationChangedListener listener) {
mListener = listener;
if (mlocationClient == null) {
mlocationClient = new AMapLocationClient(this);
mLocationOption = new AMapLocationClientOption();
// 设置定位监听
mlocationClient.setLocationListener(this);
// 设置为高精度定位模式
mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy);
// 设置定位参数
mlocationClient.setLocationOption(mLocationOption);
// 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
// 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求
// 在定位结束后,在合适的生命周期调用onDestroy()方法
// 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
mlocationClient.startLocation();
}
}
/**
* 停止定位
*/
@Override
public void deactivate() {
mListener = null;
if (mlocationClient != null) {
mlocationClient.stopLocation();
mlocationClient.onDestroy();
}
mlocationClient = null;
}
@Override
public void onMapClick(LatLng arg0) {
// TODO Auto-generated method stub
}
@Override
public void onMapLongClick(LatLng arg0) {
// TODO Auto-generated method stub
}
@Override
public void onCameraChange(CameraPosition arg0) {
// TODO Auto-generated method stub
}
@Override
public void onCameraChangeFinish(CameraPosition arg0) {
// TODO Auto-generated method stub
}
@Override
public void onTouch(MotionEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public boolean onMarkerClick(Marker arg0) {
// TODO Auto-generated method stub
return false;
}
/**
* 将String类型的经纬度转成Double类型
* 将Wgs84转成Gcj02
*/
public LatLng latLngConverter(String lat, String log) {
Double latitude = Double.parseDouble(lat);
Double longitude = Double.parseDouble(log);
// sourceLatLng待转换坐标点
LatLng sourceLatLng = new LatLng(latitude, longitude);
converter = new CoordinateConverter(GaodeMapActivity.this);
// CoordType.GPS 待转换坐标类型
converter.from(CoordType.GPS);
converter.coord(sourceLatLng);
// 执行转换操作
desLatLng = converter.convert();
return desLatLng;
}
}
版权声明:本文为birdloved原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。