高德地图集成之基础定位

来源:互联网 发布:sublimetext3 python 编辑:程序博客网 时间:2024/05/16 11:21

1、高德官网注册开发者账号并申请Ak


2、下载响应的jar包和so文件,放到app下的libs文件夹


3、build.gradle中配置sourceSets

android {    compileSdkVersion 25    buildToolsVersion "25.0.2"    defaultConfig {        applicationId "net.edaibu.gaodemap"        minSdkVersion 19        targetSdkVersion 25        versionCode 1        versionName "1.0"        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }    sourceSets {        main {            jniLibs.srcDirs = ['libs']        }    }}


4、Manifest配置权限和service以及申请的Ak

 <!-- Normal Permissions 不需要运行时注册 -->    <!--获取运营商信息,用于支持提供运营商信息相关的接口-->    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    <!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />    <!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />    <!-- 请求网络 -->    <uses-permission android:name="android.permission.INTERNET" />    <!-- 不是SDK需要的权限,是示例中的后台唤醒定位需要的权限 -->    <uses-permission android:name="android.permission.WAKE_LOCK" />    <!-- 需要运行时注册的权限 -->    <!--用于进行网络定位-->    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />    <!--用于访问GPS定位-->    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />    <!--用于提高GPS定位速度-->    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />    <!--写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据-->    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <!--读取缓存数据-->    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />    <!--用于读取手机当前的状态-->    <uses-permission android:name="android.permission.READ_PHONE_STATE" />    <!-- 更改设置 -->    <uses-permission android:name="android.permission.WRITE_SETTINGS" />    <!-- 3.2.0版本增加 -->    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />    <!-- 3.2.0版本增加-->    <uses-permission android:name="android.permission.BLUETOOTH" />
配置ak

 <meta-data            android:name="com.amap.api.v2.apikey"            android:value="6df41e5973583c4b0ce9a9df9c11bf43"/>        <!-- 定位需要的服务 -->        <service android:name="com.amap.api.location.APSService" >        </service>

5、layout中添加布局

    <com.amap.api.maps.MapView        android:id="@+id/map"        android:layout_width="match_parent"        android:layout_height="match_parent"        />

6、Activity中初始化

private MapView mMapView;    private AMap aMap;

mMapView = (MapView) findViewById(R.id.map);        mMapView.onCreate(savedInstanceState);        aMap = mMapView.getMap();

7、初始化地图

    /**     * 初始化地图     */    private void initMap() {        myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类        myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。        aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style        initMapUi();        initLocationStyle();        limitMapArea();    }

8、设置地图UI显示

 /**     * 设置地图UI显示     */    private void initMapUi() {        UiSettings uiSettings = aMap.getUiSettings();        uiSettings.setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示,非必需设置。        uiSettings.setZoomControlsEnabled(false); //关闭放大缩小按钮//       uiSettings.setCompassEnabled(true);//显示罗盘//        uiSettings.setScaleControlsEnabled(true);//显示比例尺//        uiSettings.setLogoPosition(0);//设置logo位置        aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。        // 设置定位监听        aMap.setLocationSource(this);        // 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false        aMap.setMyLocationEnabled(true);        //设置缩放级别        cameraUpdate = CameraUpdateFactory.zoomTo(17);    }

9、设置地图定位样式

  /**     * 设置地图定位样式     */    private void initLocationStyle() {        // 设置定位的类型为定位模式,有定位、跟随或地图根据面向方向旋转几种//        aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);//        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW);//只定位一次。//        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE) ;//定位一次,且将视角移动到地图中心点。//        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW) ;//连续定位、且将视角移动到地图中心点,定位蓝点跟随设备移动。(1秒1次定位)//        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE);//连续定位、且将视角移动到地图中心点,地图依照设备方向旋转,定位点会跟随设备移动。(1秒1次定位)//        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)默认执行此种模式。        //以下四种模式从5.1.0版本开始提供//        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)默认执行此种模式。//        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动。//        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,并且蓝点会跟随设备移动。        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,地图依照设备方向旋转,并且蓝点会跟随设备移动。
10、地图定位回调

 /**     * 激活定位     */    @Override    public void activate(OnLocationChangedListener listener) {        Log.e("tag", "激活定位");        mListener = listener;        if (mlocationClient == null) {            //初始化定位            mlocationClient = new AMapLocationClient(this);            //初始化定位参数            mLocationOption = new AMapLocationClientOption();            //设置定位回调监听            mlocationClient.setLocationListener(this);            //设置为高精度定位模式            mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);            //设置定位参数            mlocationClient.setLocationOption(mLocationOption);            // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,            // 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求            // 在定位结束后,在合适的生命周期调用onDestroy()方法            // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除            mlocationClient.startLocation();//启动定位        }    }    /**     * 停止定位     */    @Override    public void deactivate() {        Log.e("tag", "停止定位");        mListener = null;        if (mlocationClient != null) {            mlocationClient.stopLocation();            mlocationClient.onDestroy();        }        mlocationClient = null;    }    /**     * 定位回调     *     * @param aMapLocation     */    @Override    public void onLocationChanged(AMapLocation aMapLocation) {        if (mListener != null && aMapLocation != null) {            if (aMapLocation != null                    && aMapLocation.getErrorCode() == 0) {                mListener.onLocationChanged(aMapLocation);// 显示系统小蓝点                //直接放大到指定倍数                //aMap.moveCamera(cameraUpdate);                //动画效果放大到指定倍数                aMap.animateCamera(cameraUpdate);                Log.e("tag", "定位成功");            } else {                String errText = "定位失败," + aMapLocation.getErrorCode() + ": " + aMapLocation.getErrorInfo();                Log.e("AmapErr", errText);            }        }    }

11、设置地图截屏管理

  /**     * 对地图进行截屏     */    private void snapShotMap() {        aMap.getMapScreenShot(new AMap.OnMapScreenShotListener() {            @Override            public void onMapScreenShot(Bitmap bitmap) {            }            @RequiresApi(api = Build.VERSION_CODES.N)            @Override            public void onMapScreenShot(Bitmap bitmap, int status) {                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");                if (null == bitmap) {                    return;                }                try {                    FileOutputStream fos = new FileOutputStream(                            Environment.getExternalStorageDirectory() + "/test_"                                    + sdf.format(new Date()) + ".png");                    boolean b = bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);                    try {                        fos.flush();                    } catch (IOException e) {                        e.printStackTrace();                    }                    try {                        fos.close();                    } catch (IOException e) {                        e.printStackTrace();                    }                    StringBuffer buffer = new StringBuffer();                    if (b)                        buffer.append("截屏成功 ");                    else {                        buffer.append("截屏失败 ");                    }                    if (status != 0)                        buffer.append("地图渲染完成,截屏无网格");                    else {                        buffer.append("地图未渲染完成,截屏有网格");                    }                    Toast.makeText(getApplicationContext(), buffer.toString(), Toast.LENGTH_SHORT);                } catch (FileNotFoundException e) {                    e.printStackTrace();                }            }        });    }

12、地图生命周期管理

  @Override    protected void onResume() {        super.onResume();        mMapView.onResume();    }    @Override    protected void onPause() {        super.onPause();        mMapView.onPause();    }    @Override    protected void onDestroy() {        super.onDestroy();        mMapView.onDestroy();        if (null != mlocationClient) {            mlocationClient.onDestroy();        }    }    @Override    protected void onSaveInstanceState(Bundle outState) {        super.onSaveInstanceState(outState);        mMapView.onSaveInstanceState(outState);    }

13、可以根据经纬度限制地图显示的范围
 /**     * 限制地图显示范围     */    private void limitMapArea() {       LatLng southwestLatLng = new LatLng(40.789925, 116.838326);       LatLng northeastLatLng = new LatLng(38.740688, 114.647472);       LatLngBounds latLngBounds = new LatLngBounds(southwestLatLng, northeastLatLng);       aMap.setMapStatusLimits(latLngBounds);    }

最终效果图





原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 两岁宝宝怕生人怎么办 四岁宝宝不说话怎么办 1岁宝宝牙齿黄斑怎么办 儿子俩周半了就是不说话怎么办 两岁宝宝牙齿上有黑渍怎么办 两岁宝宝牙齿发黑怎么办 求帮助宝宝刷牙不会漱口怎么办 牙膏不小心吞了怎么办 宝宝误吃了牙膏怎么办 宝宝吃了30g牙膏怎么办 孩子把牙膏吞了怎么办 二岁宝宝有蛀牙怎么办 3岁宝宝有蛀牙了怎么办 三岁宝宝夜惊怎么办 小班孩子跳舞不好好跳怎么办 15个月宝宝拉稀怎么办 孩子学习不认真该怎么办 孩子学习不自觉该怎么办 孩子学习压力大该怎么办 分手发信息不回怎么办 两岁宝宝不会回答问题怎么办 分手了我还想他怎么办 两岁宝宝特别不听话怎么办 2岁宝宝争东西怎么办 两岁宝宝钙吸收不好怎么办 1岁宝宝害羞胆小怎么办 2岁宝宝害羞胆小怎么办 6个月的宝宝胆小怎么办 3岁半宝宝很胆小怎么办 分手了想他了怎么办 分手了还想联系怎么办 2岁多宝宝不长肉怎么办 2个月宝宝尿裤子怎么办 四岁宝宝脾气大怎么办 两周宝宝换奶粉怎么办 两周半宝宝不喝奶粉怎么办 2岁半宝宝太调皮怎么办 2岁宝宝晚上睡觉晚怎么办 三周岁半宝宝入园后不合群怎么办 数学懒于思考的孩子怎么办 2岁宝宝爱哭不讲道理怎么办