<1>先去高德开放平台去申请开发者账号,并且创建应用,获取API Key
<2>在清单文件中配置key,其中value是应用的key值
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="952d22d6f6e916e38fbe830d4517ca12" />
配置权限
<!-- 用于进行网络定位 -->
<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" />
<3>在xml文件中添加地图控件
<com.amap.api.maps.MapView
android:id="@+id/location_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.amap.api.maps.MapView>
<4>展示定位地图
public class LocationActivity extends AppCompatActivity {
public AMapLocationClient client=null;
private AMapLocationClientOption option=null;
private MapView mapView;
private AMap map;
private TextView tvAdd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_location);
initView(savedInstanceState);
}
private void initListener() {
client.setLocationListener(new AMapLocationListener() {
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
if(aMapLocation!=null){
if(aMapLocation.getErrorCode()==0){
aMapLocation.getLocationType();//获取当前结果来源,如网络定位.GPS定位
double lat=aMapLocation.getLatitude();//获取纬度
double lon=aMapLocation.getLongitude();//获取经度
aMapLocation.getAccuracy();//获取精度信息
// option.setOnceLocation(true);
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date=new Date(aMapLocation.getTime());//定位时间
LatLng latlon=new LatLng(lat,lon);
MarkerOptions marker=new MarkerOptions();
map.moveCamera(CameraUpdateFactory.newLatLngZoom(latlon,15));//显示在指定位置
marker.position(latlon);
marker.title("当前位置");
marker.visible(true);
BitmapDescriptor bitmapDescriptor= BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.point));
marker.icon(bitmapDescriptor);
map.addMarker(marker);
tvAdd.setText("当前位置:"+aMapLocation.getAddress()+" "+format.format(date));
}else{
Toast.makeText(LocationActivity.this,"定位失败",Toast.LENGTH_SHORT).show();
}
}
map.setMyLocationEnabled(true);
}
});
}
private void initLocation() {
option=new AMapLocationClientOption();
option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
option.setNeedAddress(true);
option.setInterval(60000);
client.setLocationOption(option);
client.startLocation();
}
private void initView(Bundle savedInstanceState) {
mapView = ((MapView) findViewById(R.id.location_view));
tvAdd = ((TextView) findViewById(R.id.location_tv));
//此方法必须重写
mapView.onCreate(savedInstanceState);
client=new AMapLocationClient(getApplicationContext());
initListener();
map=mapView.getMap();
map.setMapType(AMap.MAP_TYPE_NORMAL);
initLocation();
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
client.onDestroy();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
}