集成高德地图SDK实现实时定位

来源:互联网 发布:pure music mac 破解 编辑:程序博客网 时间:2024/05/16 07:00

因为项目需要地理定位,采用了高德地图的SDK。在这里记录下步骤。   

第一步:去高德API注册开发者信息。https://id.amap.com/register/  然后填写开发者信息。成功之后的界面是这样的。点击添加Key。




然后会弹出一个界面如下:




我的开发环境是Android studio。然后打开Android studio。找到如图的help。点击查找Find Action。然后输入Terminal。



接下来我们可以看到我们的Terminal终端。或者直接在左下角可以看到我们的终端控制台。首先cd C:\user\xxx\.android
然后运行keytool -v -list -keystore debug.keystore可以得到你的SHA1.





ok了然后我们就可以把上面的SHA1的值复制到图2上面去。然后保存。就会得到如图1。

第二步:下载SDK开发包。里面是一个demo和jar包还有API文件。咱们只需要把jar包复制到你的lib下。Android studio在build.gradle目录下添加如下代码: 


 compile files('libs/AMap_Location_V3.0.0_20160922.jar')

这样,jar包就成功导入了。

第三步:对高德的导入进行配置,在AndroidManifest.xml的<application>标签里进行如下配置。  

    <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.ACCESS_NETWORK_STATE"></uses-permission>    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>    <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_EXTERNAL_STORAGE"></uses-permission>    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>    <application        android:name=".MyApplication"        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@android:style/Theme.NoTitleBar">        <!--高德地图配置部分-->        <meta-data            android:name="com.amap.api.v2.apikey"            android:value="e2c5e5e53f55b03a8da60ceb0574d45d"/>        <!--高德地图配置service-->        <service android:name=".service.GaodeMapService"/><span style="white-space:pre"></span>...<pre name="code" class="java"><application
这个Service是用来后台定位的。大家如果需要就添加创建一个Service并且进行配置。

第四步:创建一个MapUtils.java工具类。具体代码如下:

public class MapUtils {/** *  开始定位 */public final static int MSG_LOCATION_START = 0;/** * 定位完成 */public final static int MSG_LOCATION_FINISH = 1;/** * 停止定位 */public final static int MSG_LOCATION_STOP= 2;public final static String KEY_URL = "URL";public final static String URL_H5LOCATION = "file:///android_asset/location.html";/** * 根据定位结果返回定位信息的字符串 * @param loc * @return */public synchronized static String getLocationStr(AMapLocation location){if(null == location){return null;}StringBuffer sb = new StringBuffer();//errCode等于0代表定位成功,其他的为定位失败,具体的可以参照官网定位错误码说明if(location.getErrorCode() == 0){sb.append("定位成功" + "\n");sb.append("定位类型: " + location.getLocationType() + "\n");sb.append("经    度    : " + location.getLongitude() + "\n");sb.append("纬    度    : " + location.getLatitude() + "\n");sb.append("精    度    : " + location.getAccuracy() + "米" + "\n");sb.append("提供者    : " + location.getProvider() + "\n");if (location.getProvider().equalsIgnoreCase(android.location.LocationManager.GPS_PROVIDER)) {// 以下信息只有提供者是GPS时才会有sb.append("速    度    : " + location.getSpeed() + "米/秒" + "\n");sb.append("角    度    : " + location.getBearing() + "\n");// 获取当前提供定位服务的卫星个数sb.append("星    数    : "+ location.getSatellites() + "\n");} else {// 提供者是GPS时是没有以下信息的sb.append("国    家    : " + location.getCountry() + "\n");sb.append("省            : " + location.getProvince() + "\n");sb.append("市            : " + location.getCity() + "\n");sb.append("城市编码 : " + location.getCityCode() + "\n");sb.append("区            : " + location.getDistrict() + "\n");sb.append("区域 码   : " + location.getAdCode() + "\n");sb.append("地    址    : " + location.getAddress() + "\n");sb.append("兴趣点    : " + location.getPoiName() + "\n");//定位完成的时间sb.append("定位时间: " + formatUTC(location.getTime(), "yyyy-MM-dd HH:mm:ss") + "\n");}} else {//定位失败sb.append("定位失败" + "\n");sb.append("错误码:" + location.getErrorCode() + "\n");sb.append("错误信息:" + location.getErrorInfo() + "\n");sb.append("错误描述:" + location.getLocationDetail() + "\n");}//定位之后的回调时间sb.append("回调时间: " + formatUTC(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss") + "\n");return sb.toString();}private static SimpleDateFormat sdf = null;public synchronized static String formatUTC(long l, String strPattern) {if (TextUtils.isEmpty(strPattern)) {strPattern = "yyyy-MM-dd HH:mm:ss";}if (sdf == null) {try {sdf = new SimpleDateFormat(strPattern, Locale.CHINA);} catch (Throwable e) {}} else {sdf.applyPattern(strPattern);}return sdf == null ? "NULL" : sdf.format(l);}}

第五步:在Activity中进行位置定位。具体代码如下:
    //得到地理位置方法    private synchronized void getLocation(Context context){        Log.e("TAG","正在执行获取getLocation方法");        //声明AMapLocationClient类对象        AMapLocationClient mLocationClient = null;        AMapLocationClientOption locationClientOption = new AMapLocationClientOption();        //设置为高精度        locationClientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);        //设置默认返回地址        locationClientOption.setNeedAddress(true);        //设置是否只定位一次        locationClientOption.setOnceLocation(true);        if(locationClientOption.isOnceLocation()){            locationClientOption.setOnceLocationLatest(true);        }        //设置是否强制刷新WiFi        locationClientOption.setWifiActiveScan(true);        //设置是否允许模拟位置,默认为false,不允许模拟位置        locationClientOption.setMockEnable(true);        //设置定位间隔,单位毫秒,默认为2000ms        locationClientOption.setInterval(2000);        //初始化定位        mLocationClient = new AMapLocationClient(context);        //为定位进行设置        mLocationClient.setLocationOption(locationClientOption);        //设置定位回调监听        mLocationClient.setLocationListener(mAMapLocationListener);        //启动定位        mLocationClient.startLocation();    }    AMapLocationListener mAMapLocationListener = new AMapLocationListener(){        @Override        public void onLocationChanged(AMapLocation amapLocation) {            if (amapLocation != null) {                if (amapLocation.getErrorCode() == 0) {                    s =   MapUtils.getLocationStr(amapLocation);                    edt_show_location.setText(s);                }            }        }    };
在上面代码中,首先获取一个获取位置的服务类AMapLocationClient对象,然后获取一个配置AMapLocationClientOption类对象进行配置。然后把
AMapLocationClientOption的设置结果设置到AMapLocationClient对象中。然后开始获取定位。结果会在回调接口中获取到。
这样我们就获取了我们的地理位置。然后我们可以自行对获取到的信息进行截取。地理位置获取的形式如下:
好了,上面我们就完成了一次地理定位了。代码要注意的一点回调接口是采用异步的回调,需要把回调放在方法外面实例化。为的就在监听中进行UI的更新,请看上面的代码。Android6.0需要进行运行权限检查。
具体请看SDK中的Demo里面权限检查类用法。
1 0
原创粉丝点击