高德地图定位功能在Android上的集成

First:

关联高德地图的SDK,Android Studio是在app build.gradle 中的dependencies 根节点下添加

compile 'com.amap.api:location:latest.integration'//定位

compile 'com.amap.api:search:latest.integration'//搜索

compile 'com.amap.api:3dmap:latest.integration'//3D地图

等语句,具体根据项目需求从官方api文档中查找。eclipse 则是直接从官方下载相应的jar包粘贴到lib文件夹下,然后再与项目关联。

Second:
在高德开发平台上根据其具体要求创建一个新的应用,其中 SHA1 的获取是进入Dos操作系统界面通过 keytool -list -v -keystore 命令获取,
签名发布包的SHA1的获取方式为keytool -list -v -keystore 文件路径\XXX.jks,如:keytool -list -v -keystore D:\XXXX\XXXX\app\XXX.jks,
具体界面如图所示:


debug包的SHA1的获取方式为cd .android (回车),keytool -list -v -keystore debug.keystore 具体如图所示

其中发布包的密钥库密码为你打签名包时的.jks文件密码,debug包的密钥库密码正常都是android。(ps:Dos操作界面输入密码是没有提示的)输入完,回车就好了。PackageName的获取就是在app目录下AndroidManifest文件中的包名。

Third:

在app目录下的AndroidManifest文件配置相关权限以及key,key配置在application根节点下,具体为
 <meta-data

 android:name="com.amap.api.v2.apikey"

 android:value="key值" />

<service android:name="com.amap.api.location.APSService"/>

<service android:name="com.amap.api.location.APSService"/>

相关的权限主要为

 <!--用于进行网络定位-->

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>

    <!--用于访问GPS定位-->

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

    <!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></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>

因为定位权限是危险权限,在Android 6 以后都要在代码中动态请求,才会有效果。

扫描二维码关注公众号,回复: 4763549 查看本文章

Fourth:

封装Location

import android.content.Context;

import com.amap.api.location.AMapLocationClient;

import com.amap.api.location.AMapLocationClientOption;

import com.amap.api.location.AMapLocationListener;



public class Location {

    AMapLocationClient client;

    AMapLocationClientOption option;

    AMapLocationListener listener;

    public Location(Context mContext, AMapLocationListener listener) {

        this.client = new AMapLocationClient(mContext);

        //初始化定位参数

        option = new AMapLocationClientOption();

        this.listener = listener;

        init();

    }

    public void init() {

        //设置定位监听

        client.setLocationListener(listener);

        //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式

        option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);

        //设置定位间隔,单位毫秒,默认为2000ms

        option.setInterval(10000);

        //设置定位参数

        client.setLocationOption(option);

        // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,

        // 注意设置合适的定位时间的间隔(最小间隔支持为1000ms),并且在合适时间调用stopLocation()方法来取消定位请求

        // 在定位结束后,在合适的生命周期调用onDestroy()方法

        // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除

        //启动定位

        client.startLocation();

    }

    /**

     * 销毁Client

     */

    public void destory() {

        client.stopLocation();

        client.onDestroy();

    }

}

到这基本都完成了,小白一枚有什么问题请多多包涵,继续写bug!!!

猜你喜欢

转载自blog.csdn.net/lala_peng/article/details/78390903
今日推荐