首先要有在官网下载的demo
首先导依赖
在当前module 中的build.grade 中添加
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
创建一个 名为 LocationUtil的类直接复制里面的代码
public class LocationUtil implements AMapLocationListener {
private AMapLocationClient aMapLocationClient;
private AMapLocationClientOption clientOption;
private ILocationCallBack callBack;
public void startLocate(Context context){
aMapLocationClient = new AMapLocationClient(context);
//设置监听回调
aMapLocationClient.setLocationListener(this);
//初始化定位参数
clientOption = new AMapLocationClientOption();
clientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Battery_Saving);
clientOption.setNeedAddress(true);
clientOption.setOnceLocation(false);
//设置是否强制刷新WIFI,默认为强制刷新
clientOption.setWifiActiveScan(true);
//设置是否允许模拟位置,默认为false,不允许模拟位置
clientOption.setMockEnable(false);
//设置定位间隔
clientOption.setInterval(2000);
aMapLocationClient.setLocationOption(clientOption);
aMapLocationClient.startLocation();
}
//完成定位回调
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
if(aMapLocation != null){
if(aMapLocation.getErrorCode() == 0){
//定位成功完成回调
String country = aMapLocation.getCountry();
String province = aMapLocation.getProvince();
String city = aMapLocation.getCity();
String district = aMapLocation.getDistrict();
String street = aMapLocation.getStreet();
double lat = aMapLocation.getLatitude();
double lgt = aMapLocation.getLongitude();
callBack.callBack(country + province + city + district + street,lat,lgt,aMapLocation);
}else{
//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
Log.e("AmapError", "location Error, ErrCode:"
+ aMapLocation.getErrorCode() + ", errInfo:"
+ aMapLocation.getErrorInfo());
}
}
}
/**
* 自定义图标
* @return
*/
public MarkerOptions getMarkerOption(String str, double lat, double lgt){
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.icon(BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher));
markerOptions.position(new LatLng(lat,lgt));
markerOptions.title(str);
markerOptions.snippet("纬度:" + lat + " 经度:" + lgt);
markerOptions.period(100);
return markerOptions;
}
public interface ILocationCallBack{
void callBack(String str,double lat,double lgt,AMapLocation aMapLocation);
}
public void setLocationCallBack(ILocationCallBack callBack){
this.callBack = callBack;
}
}
复制MainActivity 中的代码
public class MainActivity extends AppCompatActivity implements LocationSource{
private MapView mapView;
private AMap aMap;
private LocationSource.OnLocationChangedListener mListener = null;//定位监听器
private LocationUtil locationUtil;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mapView = (MapView) findViewById(R.id.MapView);
mapView.onCreate(savedInstanceState);
init();
}
private void init() {
if(aMap == null){
aMap = mapView.getMap();
}
setLocationCallBack();
//设置定位监听
aMap.setLocationSource(this);
//设置缩放级别
aMap.moveCamera(CameraUpdateFactory.zoomTo(15));
//显示定位层并可触发,默认false
aMap.setMyLocationEnabled(true);
}
private void setLocationCallBack(){
locationUtil = new LocationUtil();
locationUtil.setLocationCallBack(new LocationUtil.ILocationCallBack() {
@Override
public void callBack(String str,double lat,double lgt,AMapLocation aMapLocation) {
//根据获取的经纬度,将地图移动到定位位置
aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(lat,lgt)));
mListener.onLocationChanged(aMapLocation);
//添加定位图标
aMap.addMarker(locationUtil.getMarkerOption(str,lat,lgt));
}
});
}
//定位激活回调
@Override
public void activate(OnLocationChangedListener onLocationChangedListener) {
mListener = onLocationChangedListener;
locationUtil.startLocate(getApplicationContext());
}
@Override
public void deactivate() {
mListener = null;
}
@Override
protected void onPause() {
super.onPause();
//暂停地图的绘制
mapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
//销毁地图
mapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//重新绘制加载地图
mapView.onResume();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
}
activity_main 中的代码
<com.amap.api.maps.MapView
android:id="@+id/MapView"
android:layout_width="match_parent"
android:layout_height="match_parent"></com.amap.api.maps.MapView>
在清单文件中添加的权限
<!-- Normal Permissions 不需要运行时注册 -->
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
<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.CHANGE_CONFIGURATION"
tools:ignore="ProtectedPermissions" />
<!-- 请求网络 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 不是SDK需要的权限,是示例中的后台唤醒定位需要的权限 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- 需要运行时注册的权限 -->
<!-- 用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 用于提高GPS定位速度 -->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<!-- 写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 读取缓存数据 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 用于读取手机当前的状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 更改设置 -->
<uses-permission
android:name="android.permission.WRITE_SETTINGS"
tools:ignore="ProtectedPermissions" />
<!-- 3.2.0版本增加 -->
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!-- 3.2.0版本增加 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<!--不用复制application中的本来就有的代码 -->
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 设置key -->
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="xxxxxx" />
<!-- 定位需要的服务 -->
<service android:name="com.amap.api.location.APSService"></service>
</application>
效果就出来了
如果没有小三角的话就开启一下 GPS 然后运行