Android简单实现高德地图显示及定位
来源:互联网 发布:安卓应用程序源码 编辑:程序博客网 时间:2024/05/22 05:55
1、要实现高德地图的定位,首先要下载高德地图的SDK以及高德地图定位的SDK
下载地址:http://lbs.amap.com/api/android-sdk/download/
http://lbs.amap.com/api/android-location-sdk/download/
然后注册账号后到控制台应用管理—–>添加应用—->添加key
获取到自己的key值
获取key的具体方法在官网上可以找到就不多做解释了
http://lbs.amap.com/
2、通过解压得到.Jar文件并放到libs文件中,手动添加到依赖库中(右键Add—-)
3、如果你的地图SDK是3D的需要在main中创建 jniLibs 文件夹并把你解压出来的其他文件放到此处
4、开发环境已经配置好了,接下来就是敲代码了
在工程的“ AndroidManifest.xml ”文件添加key和Service
<meta-data android:name="com.amap.api.v2.apikey"android:value="afe02836f46f2c42f772ea621027e932" /><service android:name="com.amap.api.location.APSService"></service>
添加权限
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <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" />
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
acticity_main.xml布局文件
<com.amap.api.maps.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent"></com.amap.api.maps.MapView>
MainActivity代码
package com.example.navi_map;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.widget.Toast;import com.amap.api.location.AMapLocation;import com.amap.api.location.AMapLocationClient;import com.amap.api.location.AMapLocationClientOption;import com.amap.api.location.AMapLocationListener;import com.amap.api.maps.AMap;import com.amap.api.maps.CameraUpdateFactory;import com.amap.api.maps.LocationSource;import com.amap.api.maps.MapView;import com.amap.api.maps.UiSettings;import com.amap.api.maps.model.LatLng;import java.text.SimpleDateFormat;import java.util.Date;public class MainActivity extends AppCompatActivity implements LocationSource, AMapLocationListener { private AMap aMap; private MapView mapView; private AMapLocationClient mLocationClient = null; public AMapLocationClientOption mLocationOption = null; private OnLocationChangedListener mListener = null; private boolean isFirstLoc = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mapView = (MapView) findViewById(R.id.map); mapView.onCreate(savedInstanceState); if (aMap == null) { aMap = mapView.getMap(); UiSettings settings = aMap.getUiSettings(); aMap.setLocationSource(this); settings.setMyLocationButtonEnabled(true); aMap.setMyLocationEnabled(true); } location(); } private void location() { mLocationClient = new AMapLocationClient(getApplicationContext()); mLocationClient.setLocationListener(this); mLocationOption = new AMapLocationClientOption(); mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); mLocationOption.setNeedAddress(true); mLocationOption.setOnceLocation(false); mLocationOption.setWifiActiveScan(true); mLocationOption.setMockEnable(false); mLocationOption.setInterval(2000); mLocationClient.setLocationOption(mLocationOption); mLocationClient.startLocation(); } @Override protected void onDestroy() { super.onDestroy(); mapView.onDestroy(); mLocationClient.stopLocation(); mLocationClient.onDestroy(); } @Override protected void onResume() { super.onResume(); mapView.onResume(); } @Override protected void onPause() { super.onPause(); mapView.onPause(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mapView.onSaveInstanceState(outState); } @Override public void onLocationChanged(AMapLocation aMapLocation) { if (aMapLocation != null) { if (aMapLocation.getErrorCode() == 0) { aMapLocation.getLocationType(); aMapLocation.getLatitude(); aMapLocation.getLongitude(); aMapLocation.getAccuracy(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(aMapLocation.getTime()); df.format(date); aMapLocation.getAddress(); aMapLocation.getCountry(); aMapLocation.getProvince(); aMapLocation.getCity(); aMapLocation.getDistrict(); aMapLocation.getStreet(); aMapLocation.getStreetNum(); aMapLocation.getCityCode(); aMapLocation.getAdCode(); if (isFirstLoc) { aMap.moveCamera(CameraUpdateFactory.zoomTo(17)); aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude()))); mListener.onLocationChanged(aMapLocation); StringBuffer buffer = new StringBuffer(); buffer.append(aMapLocation.getCountry() + "" + aMapLocation.getProvince() + "" + aMapLocation.getCity() + "" + aMapLocation.getProvince() + "" + aMapLocation.getDistrict() + "" + aMapLocation.getStreet() + "" + aMapLocation.getStreetNum()); Toast.makeText(getApplicationContext(), buffer.toString(), Toast.LENGTH_LONG).show(); isFirstLoc = false; } } else { Log.e("AmapError", "location Error, ErrCode:" + aMapLocation.getErrorCode() + ", errInfo:" + aMapLocation.getErrorInfo()); Toast.makeText(getApplicationContext(), "定位失败", Toast.LENGTH_LONG).show(); } } } @Override public void activate(OnLocationChangedListener onLocationChangedListener) { mListener = onLocationChangedListener; } @Override public void deactivate() { mListener = null; }}