1、加权限:
<!-- 用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 用于获取运营商信息,用于支持提供运营商信息相关的接口 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 用于访问网络,网络定位需要上网 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 用于读取手机当前的状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 用于写入缓存数据到扩展存储卡 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 用于申请调用A-GPS模块 -->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<!-- 用于申请获取蓝牙信息进行室内定位 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!--允许程序打开网络套接字-->
<uses-permission android:name="android.permission.INTERNET" />
<!--允许程序设置内置sd卡的写权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--允许程序获取网络状态-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--允许程序访问WiFi网络信息-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--允许程序读写手机状态和身份-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--允许程序访问CellID或WiFi热点来获取粗略的位置-->
<service android:name="com.amap.api.location.APSService" />
2 添加自己生成的 AppKay
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="1a9f09817b4a4f224f2a761969febffd">
//开发者申请的key
</meta-data>
VALUES <string name="no_result">对不起,没有搜索到相关数据!</string>
sourceSets{
main{
jniLibs.srcDirs = ['libs']
}
}
<com.amap.api.maps.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
//声明变量和接口
private AMap aMap;
MapView mMapView = null;
MyLocationStyle myLocationStyle;
//OnCreate方法调用
private void initView(Bundle savedInstanceState) {
mMapView = (MapView) findViewById(R.id.map);
//在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
mMapView.onCreate(savedInstanceState);
if (aMap == null) {
aMap = mMapView.getMap();
}
aMap.setOnMarkerClickListener(new AMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
Toast.makeText(Main2Activity.this, marker.getPosition().toString() + "--" + marker.getTitle() + "--" + marker.getSnippet(), Toast.LENGTH_SHORT).show();
//获取起点坐标
Location myLocation = aMap.getMyLocation();
LatLonPoint start = new LatLonPoint(myLocation.getLatitude(),myLocation.getLongitude());
//获取目的地坐标
LatLng position = marker.getPosition();
LatLonPoint end = new LatLonPoint(position.latitude,position.longitude);
//发起路径规划的算路
RouteSearch routeSearch = new RouteSearch(Main2Activity.this);
routeSearch.setRouteSearchListener(Main2Activity.this);
//fromAndTo 表示起点和目的地的坐标
RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(start,end);
//drivingMode 驾驶模式 :例如躲避拥堵 不走高速 速度优先等等
RouteSearch.DriveRouteQuery query = new RouteSearch.DriveRouteQuery(fromAndTo, 0, null, null, "");
routeSearch.calculateDriveRouteAsyn(query);
return true;
}
});
// 初始化蓝点
initSelf();
}
private void initSelf() {
myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。
myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
//aMap.getUiSettings().setMyLocationButtonEnabled(true);设置默认定位按钮是否显示,非必需设置。
aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
myLocationStyle.showMyLocation(true);
}
//生命周期方法等
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
mMapView.onPause();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
mMapView.onSaveInstanceState(outState);
}
// TODO POI检索 兴趣点检索 搜索功能
//keyWord表示搜索字符串,
//第二个参数表示POI搜索类型,二者选填其一,选用POI搜索类型时建议填写类型代码,码表可以参考下方(而非文字)
//cityCode表示POI搜索区域,可以是城市编码也可以是城市名称,也可以传空字符串,空字符串代表全国在全国范围内进行搜索
PoiSearch.Query query = new PoiSearch.Query(mSeacherString, "", "昌平");
query.setPageSize(50);// 设置每页最多返回多少条poiitem
query.setPageNum(1);//设置查询页码
PoiSearch poiSearch = new PoiSearch(this, query);
poiSearch.setOnPoiSearchListener(this);
poiSearch.searchPOIAsyn();//开启搜索
//搜索的返回
//实现接口 PoiSearch.OnPoiSearchListener, RouteSearch.OnRouteSearchListener
@Override
public void onPoiSearched(PoiResult poiResult, int i) {
//搜索结果返回
ArrayList<PoiItem> pois = poiResult.getPois();
mAmap.clear();//清除之前的标记点
for (int j = 0; j < pois.size(); j++) {
PoiItem poiItem = pois.get(j);
Log.e("TAG", poiItem.getTitle() + "---" + poiItem.getSnippet());
LatLonPoint latLonPoint = poiItem.getLatLonPoint();//获取具体兴趣点的经纬度
LatLng latLng = new LatLng(latLonPoint.getLatitude(), latLonPoint.getLongitude());
final Marker marker = mAmap.addMarker(new MarkerOptions().position(latLng).title(poiItem.getTitle()).snippet(poiItem.getSnippet()));
}
}
@Override
public void onPoiItemSearched(PoiItem poiItem, int i) {
}
//驾车路线规划
@Override
public void onBusRouteSearched(BusRouteResult busRouteResult, int i) {
}
@Override
public void onDriveRouteSearched(DriveRouteResult result, int errorCode) {
//解析结果
mAmap.clear();// 清理地图上的所有覆盖物
if (errorCode == AMapException.CODE_AMAP_SUCCESS) {
if (result != null && result.getPaths() != null) {
if (result.getPaths().size() > 0) {
final DrivePath drivePath = result.getPaths()
.get(0);
DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(
Main4Activity.this, mAmap, drivePath,
result.getStartPos(),
result.getTargetPos(), null);
drivingRouteOverlay.setNodeIconVisibility(false);//设置节点marker是否显示
drivingRouteOverlay.setIsColorfulline(true);//是否用颜色展示交通拥堵情况,默认true
drivingRouteOverlay.removeFromMap();
drivingRouteOverlay.addToMap();
drivingRouteOverlay.zoomToSpan();
}
}
}
}
@Override
public void onWalkRouteSearched(WalkRouteResult walkRouteResult, int i) {
}
@Override
public void onRideRouteSearched(RideRouteResult rideRouteResult, int i) {
}
//精确地点
geocodeSearch = new GeocodeSearch(this);
geocodeSearch.setOnGeocodeSearchListener(this);
GeocodeQuery query = new GeocodeQuery(dz, "010");
geocodeSearch.getFromLocationNameAsyn(query);
@Override
public void onGeocodeSearched(GeocodeResult geocodeResult, int i) {
Log.e("TAG",geocodeResult.getGeocodeAddressList().get(0).getLatLonPoint().toString());
LatLonPoint latLonPoint= geocodeResult.getGeocodeAddressList().get(0).getLatLonPoint();
LatLng latLng = new LatLng(latLonPoint.getLatitude(),latLonPoint.getLongitude());
final Marker marker = aMap.addMarker(new MarkerOptions().position(latLng).title("北京").snippet(dz));
}