6.4 定位

官方档案

http://lbs.amap.com/api/android-location-sdk/guide/android-location/getlocation/

(1) 在AndroidManifest.xml中添加如下权限

<!--允许程序设置内置sd卡的写权限-->
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

  <!--允许程序打开网络套接字-->
 <uses-permission android:name="android.permission.INTERNET"/>

 <!--允许程序访问CellID或WiFi热点来获取粗略的位置-->
 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

 <!--允许程序获取网络状态-->
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

 <!--用于访问GPS定位-->
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

 <!--允许程序读写手机状态和身份-->
 <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

 <!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

 <!--允许程序访问WiFi网络信息-->
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>


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

(2) 在AndroidManifest.xml中的<application>标签中加入如下权限

 <!-- 开启定位权限 -->
 <service android:name="com.amap.api.location.APSService"/>

(3) 相关代码如下


  //定位客户端对象
 protected AMapLocationClient mLocationClient = null;

/*--------------  定位接口操作(start) ------------ */

        /*------1 获取客户端定位对象 ---- */
        mLocationClient = new AMapLocationClient(getApplicationContext());


        /*------2 配置定位属性 -------*/
        //初始化AMapLocationClientOption对象
        mLocationOption = new AMapLocationClientOption();

        //设定持续定位
        //设置定位间隔,单位毫秒,默认为2000ms,最低1000ms
        mLocationOption.setInterval(2000);

        //mLocationOption.setOnceLocation(true);

        //给定位客户端对象设置定位参数
        mLocationClient.setLocationOption(mLocationOption);


        /* -----3 设置定位回调监听 ---- */
        mLocationClient.setLocationListener(new AMapLocationListener() {
            @Override
            public void onLocationChanged(AMapLocation aMapLocation) {
                if (aMapLocation != null) {
                    if (aMapLocation.getErrorCode() == 0) {
                        //可在其中解析amapLocation获取相应内容。
                        Log.e("Amap", "address: " + aMapLocation.getAddress());

                        //取出经纬度
                        LatLng latLng = new LatLng(aMapLocation.getLatitude(),
                                                   aMapLocation.getLongitude());

                        //添加Marker显示定位位置
                        if (locationMarker == null) {
                            //如果是空的添加一个新的,icon方法就是设置定位图标,可以自定义
                            locationMarker = mMap.addMarker(new MarkerOptions()
                                    .position(latLng)
                                    .icon(BitmapDescriptorFactory.fromResource(R.drawable.location_marker)));
                        } else {
                            //已经添加过了,修改位置即可
                            locationMarker.setPosition(latLng);
                        }

                        //得到当前坐标点
                        CameraPosition cp = mMap.getCameraPosition();
                        //然后可以移动到定位点,使用animateCamera就有动画效果
                        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, cp.zoom));



                    }else {
                        //定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
                        Log.e("AmapError","location Error, ErrCode:"
                                + aMapLocation.getErrorCode() + ", errInfo:"
                                + aMapLocation.getErrorInfo());
                    }
                }
            }
        });

        /*--- 4 启动定位---*/
        mLocationClient.startLocation();


        /*--------------  定位接口操作(end) ------------ */

results matching ""

    No results matching ""