zoukankan      html  css  js  c++  java
  • 使用高德地图SDK获取定位信息

    使用高德地图SDK获取定位信息

    第一步:

      在高德官网下载SDK,如我这里需要获取定位信息,故仅下载“定位功能”

    第二步:

      注册成为开发者,并创建应用获取相应的key。其中,在使用Android Studio在获取SHA1时,可能出现win10的Terminal 工具无法输入(或输入有问题)时,解决方法

    第三步:

      将之前下载的SDK的jar包放入相应项目的libs中;

      在 build.gradle 文件的 dependencies 中配置 compile fileTree(include: ['*.jar'], dir: 'libs')。 

    dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    }
    

      如果还是找不到jar包,可加入下列语句,进行编译即可(编译完成后也可删除,不会出问题)。

    compile files('libs/umeng_social_sdk.jar')
    

    第四步

      在application标签中加入

      (1)

    <meta-data
       android:name="com.amap.api.v2.apikey"    <!--注意此处不能变,对应jar包中相应的内容-->
       android:value="**********"/>   <!--此处为自己第二步中申请的key值-->       
    

      (2)声明Service组件。在application标签中声明service组件,每个app拥有自己单独的定位service

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

    第五步

      声明权限

     <!--用于进行网络定位-->
    <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>
    

    第六步

      初始化定位,配置参数,参考

    /初始化定位参数
    private void initLoc()
    {
        //初始化定位
        mLocationClient = new AMapLocationClient(getApplicationContext());
        //初始化定位监听
        mLocationListener = new AMapLocationListener(){
            @Override
    		//实现监听器,在监听器的回调方法内解析AMapLocation对象
            public void onLocationChanged(AMapLocation amapLocation) {
    
                if (amapLocation != null) {
                    if (amapLocation.getErrorCode() == 0)
                    {//解析amapLocation获取相应内容
                        amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表
                        String address = amapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息
                        amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表
                        amapLocation.getLatitude();//获取纬度
                        amapLocation.getLongitude();//获取经度
                        amapLocation.getAccuracy();//获取精度信息
                        amapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。
    
                        String address1 =
                        amapLocation.getCountry()              //国家信息
                        + amapLocation.getProvince()           //省信息
                        + amapLocation.getCity()               //城市信息
                        + amapLocation.getDistrict()           //城区信息
                        + amapLocation.getStreet()             //街道信息
                        + amapLocation.getStreetNum()          //街道门牌号信息
                        + amapLocation.getPoiName();           //获取当前定位点的POI信息(Point Of Interest)
                        amapLocation.getGpsAccuracyStatus();//获取GPS的当前状态
                        //获取定位时间
                        SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd_HHmmss");
                        Date date = new Date(amapLocation.getTime());
                        String time = df.format(date);
                     
                    }else {
                        //定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
                        Log.e("AmapError","location Error, ErrCode:"
                                + amapLocation.getErrorCode() + ", errInfo:"
                                + amapLocation.getErrorInfo());
                        Toast.makeText(getApplicationContext(), "定位失败", Toast.LENGTH_LONG);
                    }
                }
            }
        };
        //设置定位回调监听
        mLocationClient.setLocationListener(mLocationListener);
        //初始化AMapLocationClientOption对象
        mLocationOption = new AMapLocationClientOption();
    
        //设置定位模式
        mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
        //设置是否返回地址信息(默认返回地址信息)
        mLocationOption.setNeedAddress(true);
        //获取最近3s内精度最高的一次定位结果:
        //设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。
        // 如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。
        mLocationOption.setOnceLocationLatest(true);
        //设置是否强制刷新WIFI,默认为true,强制刷新,会增加电量损耗,但精度高
        mLocationOption.setWifiActiveScan(true);
        //单位是毫秒,默认30000毫秒,建议超时时间不要低于8000毫秒。
        mLocationOption.setHttpTimeOut(20000);
        //给定位客户端对象设置定位参数
        mLocationClient.setLocationOption(mLocationOption);
    
    }
    

    第七步

      启动定位

    mLocationClient.startLocation();
    

      停止定位

    mLocationClient.stopLocation();//停止定位后,本地定位服务并不会被销毁
    

      销毁定位客户端。销毁定位客户端之后,若要重新开启定位请重新New一个AMapLocationClient对象

    mLocationClient.onDestroy();//销毁定位客户端,同时销毁本地定位服务
  • 相关阅读:
    TortoiseGit日常使用指南
    Ajax在MVC中的应用
    STL源码学习内存管理
    功能最强大的.Net代码生成器——EasyCode
    TortoiseGit使用入门
    负载均衡时数据包流程详解
    C++异步编程 for VS2011
    (译)一个通用快速的反射方法调用
    移位运算
    使用Autofac在ASP.NET Web API上实现依赖注入
  • 原文地址:https://www.cnblogs.com/silentteen/p/6142852.html
Copyright © 2011-2022 走看看