我是靠谱客的博主 风中烤鸡,最近开发中收集的这篇文章主要介绍android-注释超详细-高德地图实现定位和切换地图类型,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

具体实现效果

1.普通模式

2.夜晚模式

3.显示交通
在夜间模式下的交通

4.卫星模式

1.实现基本地图显示

具体可参考上一篇博客安卓开发显示高德地图

2.修改AndroidManifest.xml文件

添加相应的权限

    <!--用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!--用于访问GPS定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!--获取运营商信息,用于支持提供运营商信息相关的接口-->
    <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.INTERNET" />
    <!--用于读取手机当前的状态-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!--写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!--用于申请调用A-GPS模块-->
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <!--用于申请获取蓝牙信息进行室内定位-->
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

添加服务

<meta-data android:name="com.amap.api.v2.apikey"
            android:value="您的key,具体可参考上一篇博客,获取key">
        </meta-data>
        <service android:name="com.amap.api.location.APSService" />

3.设计UI界面

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.amap.api.maps.MapView

        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    </com.amap.api.maps.MapView>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_marginTop="50dp"
        android:layout_gravity="right"
        >

        <ImageButton
            android:id="@+id/btn_map"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:backgroundTint="@android:color/transparent"
            app:srcCompat="@drawable/ic_person_pin_circle_24dp" />

        <ImageButton
            android:id="@+id/btn_traffic"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:backgroundTint="@android:color/transparent"
            app:srcCompat="@drawable/ic_traffic_black_24dp" />

        <ImageButton
            android:id="@+id/btn_satellite"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:backgroundTint="@android:color/transparent"
            app:srcCompat="@drawable/ic_navigation_black_24dp" />
    </LinearLayout>


</FrameLayout>

4.修改MainActivity内容

public class MainActivity extends AppCompatActivity {
    //创建地图容器对象
    private MapView mMapView = null;
    //创建地图对象
    private AMap aMap = null;
    //设置缩放级别
    private static final float ZOOM_VALUE = 16;

    private ImageButton btn_traffic = null;
    private ImageButton btn_satellite = null;
    private ImageButton btn_normal = null;
    private int normarl_night_flag = 0;
    private int traffic_flag = 0;
    private int statellite_flag = 0;

    private UiSettings mUiSettings;//定义一个UiSettings对象


    //创建定位服务器端
    //声明AMapLocationClient类对象
    private AMapLocationClient mLocationClient = null;
    //声明AMapLocationClientOption对象,设置发起定位(AMapLocationClient)的模式和相关参数
    public AMapLocationClientOption mLocationOption = null;
    //设置定位蓝点
    MyLocationStyle myLocationStyle;

    //初始化UI界面
    protected  void initUI(){
        //获取地图控件引用
        mMapView = (MapView) findViewById(R.id.map);
        //夜间模式
        btn_normal = findViewById(R.id.btn_map);
        //公交信息地图
        btn_traffic = findViewById(R.id.btn_traffic);
        //卫星地图
        btn_satellite = findViewById(R.id.btn_satellite);
    }

    //创建地图
    protected  void createMap(Bundle savedInstanceState){

        //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
        mMapView.onCreate(savedInstanceState);

        //得到amap地图对象
        aMap = mMapView.getMap();

        //实例化UiSettings类对象
        mUiSettings = aMap.getUiSettings();
        //指南针用于向 App 端用户展示地图方向,默认不显示。通过如下接口控制其显示
        mUiSettings.setCompassEnabled(true);
        //设置所有手势是否可用,这样子地图就可以旋转,显得高级一些
        mUiSettings.setAllGesturesEnabled(true);

        //绑定btn事件,显示正常Map
        btn_normal.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (normarl_night_flag == 0){
                    aMap.setMapType(AMap.MAP_TYPE_NIGHT);//夜间地图模式
                }else{
                    aMap.setMapType(AMap.MAP_TYPE_NORMAL);// 标准地图模式
                }
                normarl_night_flag = (normarl_night_flag + 1)%2;
            }
        });

        //绑定btn事件,让地图显示实时交通信息
        btn_traffic.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (traffic_flag == 0){
                    aMap.setTrafficEnabled(true);
                }else{
                    aMap.setTrafficEnabled(false);
                }
                traffic_flag = (traffic_flag+1)%2;
            }

        });

        //绑定btn事件,显示卫星地图
        btn_satellite.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (statellite_flag == 0){
                    aMap.setMapType(AMap.MAP_TYPE_SATELLITE);// 卫星地图模式
                }else{
                    aMap.setMapType(AMap.MAP_TYPE_NORMAL);
                }
                statellite_flag = (statellite_flag + 1)%2;
            }
        });

    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化UI界面
        initUI();
        //创建地图
        createMap(savedInstanceState);
        //定位
        doLocation();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
        mMapView.onDestroy();
        //销毁定位对象
        if(null != mLocationClient){
            mLocationClient.onDestroy();
        }
    }
    @Override
    protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
        mMapView.onResume();
    }
    @Override
    protected void onPause() {
        super.onPause();
        //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
        mMapView.onPause();
    }
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
        mMapView.onSaveInstanceState(outState);
    }

    //定位服务
    protected void doLocation(){
        // 创建客户端定位句柄
        mLocationClient = new AMapLocationClient(getApplicationContext());
        //初始化定位蓝点初始化
        myLocationStyle = new MyLocationStyle();
        //初始化定位蓝点样式类
        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。
        myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
        aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
        //aMap.getUiSettings().setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示,非必需设置
        aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
       //设置是否显示定位小蓝点,用于满足只想使用定位,不想使用定位小蓝点的场景,设置false以后图面上不再有定位蓝点的概念,但是会持续回调位置信息。
        myLocationStyle.showMyLocation(true);


        //初始化AMapLocationClientOption对象,并设置一些属性
        mLocationOption = new AMapLocationClientOption();
        //SDK默认采用连续定位模式,时间间隔2000ms,设置定位间隔,单位毫秒,默认为2000ms,最低1000ms。
        mLocationOption.setInterval(3000);
        //设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
        // 高精度定位模式:会同时使用网络定位和GPS定位,优先返回最高精度的定位结果,以及对应的地址描述信息。
        mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);

        //将option设置给Client对象
        mLocationClient.setLocationOption(mLocationOption);

        // 给客户端句柄设置listenner来处理
        mLocationClient.setLocationListener(new AMapLocationListener() {
            @Override
            public void onLocationChanged(AMapLocation aMapLocation) {
                //onLocationChanged 服务器给客户端返回数据,调用函数
                //aMapLocation给服务器客户端返回的定位数据
                if (aMapLocation != null) {//服务器有响应
                    if (aMapLocation.getErrorCode() == 0) {//AMapLocation对象不为空,当定位错误码类型为0时定位成功
                        //可在其中解析amapLocation获取相应内容
                        Log.e("Amap","address = " + aMapLocation.getAddress());//地址信息
                        Log.e("Amap","city = " + aMapLocation.getCity());//城市信息
                        Log.e("Amap","Latitude(纬度) = " + aMapLocation.getLatitude());//获取纬度
                        Log.e("Amap","Longitude(经度) = " + aMapLocation.getLongitude());//获取经度

//                        this.onLocationChanged(aMapLocation);// 定位成功显示系统小蓝点
                        aMap.animateCamera(CameraUpdateFactory.zoomTo(ZOOM_VALUE));

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

    }

}

下载源码地址高德地图定位与切换显示

最后

以上就是风中烤鸡为你收集整理的android-注释超详细-高德地图实现定位和切换地图类型的全部内容,希望文章能够帮你解决android-注释超详细-高德地图实现定位和切换地图类型所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部