高德地图应用试开发--第二版(百度试验号已阵亡)

来源:互联网 发布:labview编程详解书 编辑:程序博客网 时间:2024/06/03 14:21

一、基本工作

首先,关于高德地图开发需要做的基本工作,请看官方指导:http://lbs.amap.com/api/android-sdk/gettingstarted
(个人建议)在导入SDK时,建议使用第二种方法:通过Gradle集成SDK
只需要在主工程的build.gradle文件配置dependencies即可,极为方便,还是还是自动更新。不过有个缺点,断网时,工程将编译出错。
这里写图片描述

二、配置文件参考

本人自己的AndroidManifest.xml与build.gradle,不要复制!不要复制!参考参考!复制万一出了问题,就浪费时间了。
AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.administrator.gd_map3">    <!-- Normal Permissions 不需要运行时注册 -->    <!-- 请求网络 -->    <uses-permission android:name="android.permission.INTERNET" />    <!--获取运营商信息,用于支持提供运营商信息相关的接口-->    <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.READ_PHONE_STATE" />    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />    <!-- 需要运行时注册的权限 -->    <!--用于进行网络定位-->    <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.WRITE_SETTINGS" />    <!-- 3.2.0版本增加 -->    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />    <!-- 3.2.0版本增加-->    <uses-permission android:name="android.permission.BLUETOOTH" />    <!--C:\Program Files\Java\jdk1.8.0_121\bin>keytool -list -v -keystore C:\Users\Administrator\GD_map2.jks-->    <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:roundIcon="@mipmap/ic_launcher_round"        android:supportsRtl="true"        android:theme="@style/AppTheme">        <meta-data            android:name="com.amap.api.v2.apikey"            android:value="91901a1fb4d5b690240544c749464621"/>        <activity            android:name=".MainActivity"            android:label="@string/app_name"            android:theme="@style/AppTheme.NoActionBar">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <!-- 定位需要的服务 使用2.0的定位需要加上这个 -->        <service            android:name="com.amap.api.location.APSService" >        </service>    </application></manifest>

build.gradle

dependencies {    implementation fileTree(dir: 'libs', include: ['*.jar'])    implementation 'com.android.support:appcompat-v7:26.0.0'    implementation 'com.android.support:design:26.0.0'    implementation 'com.android.support.constraint:constraint-layout:1.0.2'    testImplementation 'junit:junit:4.12'    androidTestImplementation 'com.android.support.test:runner:0.5'    androidTestImplementation 'com.android.support.test.espresso:espresso-core:2.2.2'    compile 'com.amap.api:map3d-native:latest.integration'    compile 'com.amap.api:map3d:latest.integration'    compile 'com.amap.api:location:latest.integration'}

三、正式开始

1、添加地图
activity_main

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

MainActivity

@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //添加地图        mapView = (MapView) findViewById(R.id.map);        mapView.onCreate(savedInstanceState);// 此方法必须重写        if (amap == null)            amap = mapView.getMap();    }

2、动态权限问题 http://blog.csdn.net/qq_36881363/article/details/70879438
3、定位

  • 初始化定位基本参数,单次定位为例
public static LatLng oncelocation(Context context){        locationClientSingle = new AMapLocationClient(context);        locationClientOption = new AMapLocationClientOption();        //是否使用单次定位,这句不写就是默认连续定位。        locationClientOption.setOnceLocation(true);        // 地址信息        locationClientOption.setNeedAddress(true);        //是否使用缓存,不写就是默认缓存,当仅仅作为单次定位使用时,我觉得要写否。        locationClientOption.setLocationCacheEnable(false);        //将上面设置的locationClientOption定位参数,放入函数完成设置        locationClientSingle.setLocationOption(locationClientOption);        //设置定位监听,locationSingleListener便是自定监听的名字,当监听到位置改变时将会调用。        locationClientSingle.setLocationListener(locationSingleListener);        //开始定位        locationClientSingle.startLocation();        //这里的return不用在意,只是我后面的代码有需要用到才会加在这。        return location;}
  • 定位数据监听
//获取坐标信息,拿我单次定位的监听举例,这里的locationSingleListener便是我上面初始化定位参数设置的监听器//我在监听里没有写多余的步骤,只是规规矩矩地把改变后的定位数据传给location了而已    static AMapLocationListener locationSingleListener = new AMapLocationListener() {        @Override        public void onLocationChanged(AMapLocation aMapLocation) {            if (aMapLocation != null && aMapLocation.getErrorCode() == 0) {                double longitude = aMapLocation.getLongitude();                double latitude = aMapLocation.getLatitude();                location = new LatLng(latitude, longitude);                Log.i("Main","location change");            } else {                String errText = "定位失败," + aMapLocation.getErrorCode() + ": " + aMapLocation.getErrorInfo();                Log.e("AmapErr", errText);            }        }    };
  • 跳转视角到定位位置,并显示蓝色定位点

MainActivity

imag.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                location = dingWei.oncelocation(MainActivity.this);                //有更好的写法,不过这样看起来也挺舒服的,就懒得改了。                dingWei.movecamera(aMap,location);            }        });

movecamera(AMap aMap,LatLng location)

public static void movecamera(AMap aMap,LatLng location) {        //添加定位点图标的        if (locMarker == null){            locMarker = aMap.addMarker(new MarkerOptions().position(location));        }else{            locMarker.setPosition(location);        }        //先获取当前缩放等级,然后再调整视角,这样在多次定位情况下不会出现重置视角高度的状况        float i = aMap.getCameraPosition().zoom;        aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(location, i));    }
0 0
原创粉丝点击