高德地图需要导入以下依赖和权限
(1)依赖
implementation 'com.amap.api:location:4.2.0'
implementation'com.amap.api:map2d:5.2.0'
(2)key(在高德地图开发个人里面复制key): 放在</activity>下面
<meta-data android:name="com.amap.api.v2.apikey" android:value="2896f288bb5bb5dd5bc0ac218132be30"/>
(3)放在</activity>下面
<service android:name="com.amap.api.location.APSService"></service>
(4)权限
<!--用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!--用于获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!--用于访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<!--用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!--用于写入缓存数据到扩展存储卡-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!--用于申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
<!--用于申请获取蓝牙信息进行室内定位-->
<uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>
布局文件:

代码:
MapView mapView;
AMap aMap;
AMapLocationClient client;//负责定位的类,小蓝点
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mapView=findViewById(R.id.map);
mapView.onCreate(savedInstanceState);//必须要写
initMap();
}
public void initMap(){
aMap=mapView.getMap();//获取地图对象
//普通 AMap.MAP_TYPE_SATELLITE
aMap.setMapType(AMap.MAP_TYPE_SATELLITE);//设置地图(普通,卫星)
client=new AMapLocationClient(getApplicationContext());//定位(参数,上下文对象)
client.setLocationListener(locationListener);//给定位加监听
AMapLocationClientOption option=new AMapLocationClientOption();
option.setInterval(1000);//每隔1000定位一次;
option.setNeedAddress(true);//是否显示地址
option.setMockEnable(true);//是否显示模拟定位
option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//高精度定位
client.setLocationOption(option);
client.startLocation();//启动定位
// client.stopLocation();//关闭定位
}
AMapLocationListener locationListener=new AMapLocationListener() {
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
//定位成功
if(aMapLocation.getErrorCode()==0){
double lat=aMapLocation.getLatitude();//纬度
double jin=aMapLocation.getLongitude();//经度
LatLng latLng=new LatLng(lat,jin);
aMap.clear();//清空当前地图定位
MarkerOptions markerOptions=new MarkerOptions();//小蓝点定位标记
markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
markerOptions.position(latLng);//图标要显示的位置
markerOptions.draggable(true);//可拖动
aMap.addMarker(markerOptions);//添加小蓝点标记
CameraUpdate cameraUpdate= CameraUpdateFactory.changeLatLng(latLng);//更新定位区域
aMap.moveCamera(cameraUpdate);//移动到定位区域
}else{
Toast.makeText(MainActivity.this, "网络不可用,定位失败", Toast.LENGTH_SHORT).show();
}
}
};
//界面有焦点但可见
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
//界面失去焦点并不可见
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
//界面销毁
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
client.stopLocation();
}
普通地图效果:

卫星地图效果:
