高德地圖配置
- 第一步:需要用的jar包
- 第二步:需要用的集類
- 第三步:需要用到的權限
- 第四步:嵌入代碼
- 第五步:實現效果
第一步:需要用的jar包
第二步:需要用的集類
第三步:需要用到的權限
<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>```
**第四步:嵌入代碼**
```public class MapActivity extends AppCompatActivity {
private AMap aMap;
private MapView mapView;
private boolean isUpdate = false;
private SingleOverlay mMyOverlay;//我的位置
private SingleOverlay mPinOverlay;//大頭針
private Marker mPinMarker;//大頭針對應的marker
private Circle mCircle;//地圖上的圓
private LatLng mStartPosition;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
initMap(savedInstanceState);
}
/**
* 初始化地圖
*/
private void initMap(Bundle arg0) {
mapView = (MapView) findViewById(R.id.mapView);
mapView.onCreate(arg0);// 此方法必須重寫
if (aMap == null) {
aMap = mapView.getMap();
}
// aMap.getUiSettings().setZoomControlsEnabled(false);
if (mMyOverlay == null)
mMyOverlay = new SingleOverlay(this, aMap);
mMyOverlay.setIcon(R.drawable.icon_map_current_location);
if (mPinOverlay == null)
mPinOverlay = new SingleOverlay(this, aMap);
mPinOverlay.setIcon(R.drawable.icon_map_pin);
//啓動定位
Locate locate = new Locate(this);
locate.start();
locate.setOnLocationListener(new Locate.OnLocationListener() {
@Override
public void onReceiveLocation(AMapLocation location) {
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
mStartPosition = latLng;
addUserMarker(latLng);
addPoiMrker(latLng);
Toast.makeText(MapActivity.this, "000" + location, Toast.LENGTH_SHORT).show();
}
@Override
public void onReceiveFail() {
Toast.makeText(MapActivity.this, "0002222" , Toast.LENGTH_SHORT).show();
}
});
//回到當前位置
findViewById(R.id.current_local).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Marker marker = mMyOverlay.getMyMarker();
if (marker != null) {
mPinOverlay.move(mMyOverlay.getMyMarker().getPosition());
}
}
});
//地圖移動事件
aMap.setOnCameraChangeListener(new AMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
mCircle.setCenter(cameraPosition.target);
mPinMarker.setPosition(cameraPosition.target);
Locate locate = new Locate(MapActivity.this);
//把經緯度轉換成地址信息
locate.searchAddress(cameraPosition.target.latitude, cameraPosition.target.longitude);
locate.setOnGeoSearchLintener(new Locate.OnGeoSearchLintener() {
@Override
public void onRegeocodeSearched(RegeocodeResult arg0, int arg1) {
if (arg0 != null) {
String address = arg0.getRegeocodeAddress().getFormatAddress();
Toast.makeText(MapActivity.this, "++" + address, Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public void onCameraChangeFinish(CameraPosition cameraPosition) {
}
});
//地圖長按事件
aMap.setOnMapLongClickListener(new AMap.OnMapLongClickListener() {
@Override
public void onMapLongClick(LatLng latLng) {
mPinOverlay.move(latLng);//平移地圖,不縮放地圖
// mPinOverlay.moveAndZoom(latLng);//平移地圖 ,縮放地圖
Locate locate = new Locate(MapActivity.this);
//把經緯度轉換成地址信息
locate.searchAddress(latLng.latitude, latLng.longitude);
locate.setOnGeoSearchLintener(new Locate.OnGeoSearchLintener() {
@Override
public void onRegeocodeSearched(RegeocodeResult arg0, int arg1) {
if (arg0 != null) {
String address = arg0.getRegeocodeAddress().getFormatAddress();
Toast.makeText(MapActivity.this, "--" + address, Toast.LENGTH_SHORT).show();
}
}
});
}
});
}
/**
* 地圖上顯示當前用戶的位置
*/
private void addUserMarker(LatLng latLng) {
PoiItem item = new PoiItem();
item.setTitle("title");
item.setSnippet("snippet");
item.setLatLng(latLng);
mMyOverlay.removeFromMap();
mMyOverlay.setPoi(item);
mMyOverlay.addToMap();//顯示我的位置
mMyOverlay.zoomToSpan();
}
/**
* 地圖上顯示大頭針的位置
*/
private void addPoiMrker(LatLng latLng) {
PoiItem item = new PoiItem();
item.setTitle("title");//title 和 snippet必須添加否則氣泡不顯示
item.setSnippet("snippet");
item.setLatLng(latLng);
mPinOverlay.setPoi(item);//顯示大頭針位置
mPinOverlay.addToMap();
mPinMarker = mPinOverlay.getMyMarker();
mPinMarker.setAnchor(0.5f, 1.27f);
mCircle = mPinOverlay.addCircle(item.getLatLng(), this);
}
}
第五步:實現效果