第三方高德开放平台高德地图定位

来源:互联网 发布:linux书籍推荐 知乎 编辑:程序博客网 时间:2024/06/05 03:52

导jar包

AMap_Location_V3.6.1_20171012.jarAndroid_Map3D_SDK_V5.4.0_20170928.jar然后把五个程序放入main方法arm64-v8aarmeabiarmeabi-v7ax86x86_64

两个依赖

compile files('libs/Android_Map3D_SDK_V5.4.0_20170928.jar')    compile files('libs/AMap_Location_V3.6.1_20171012.jar')

在AndroidManifest.xml中加权限

<!--用于进行网络定位-->    <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>    <!--地图SDK(包含其搜索功能)需要的基础权限-->    <!--允许程序打开网络套接字-->    <uses-permission android:name="android.permission.INTERNET" />    <!--允许程序设置内置sd卡的写权限-->    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <!--允许程序获取网络状态-->    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    <!--允许程序访问WiFi网络信息-->    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />    <!--允许程序读写手机状态和身份-->    <uses-permission android:name="android.permission.READ_PHONE_STATE" />    <!--允许程序访问CellID或WiFi热点来获取粗略的位置-->    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

在application中添加

 <meta-data android:name="com.amap.api.v2.apikey"     //开发者申请的    keyandroid:value="3cc6884c3b4761c2682da91a295cb0d7">        </meta-data>        <service android:name="com.amap.api.location.APSService"></service>

布局文件

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

最后主方法代码

import android.os.PersistableBundle;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.widget.Toast;import com.amap.api.location.AMapLocation;import com.amap.api.location.AMapLocationClient;import com.amap.api.location.AMapLocationClientOption;import com.amap.api.location.AMapLocationListener;import com.amap.api.maps.AMap;import com.amap.api.maps.MapView;import com.amap.api.maps.model.MyLocationStyle;public class MainActivity extends AppCompatActivity {    MapView mMapView;    //声明AMapLocationClient类对象    public AMapLocationClient mLocationClient;    //声明AMapLocationClientOption对象    public AMapLocationClientOption mLocationOption;    //声明定位回调监听器    public AMapLocationListener mLocationListener = new AMapLocationListener() {        @Override        public void onLocationChanged(AMapLocation amapLocation) {            if (amapLocation != null) {                if (amapLocation.getErrorCode() == 0) {//可在其中解析amapLocation获取相应内容。                } else {                    Toast.makeText(MainActivity.this, "asdfkskdjfnsik", Toast.LENGTH_LONG).show();                    //定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。                    Log.e("AmapError", "location Error, ErrCode:"                            + amapLocation.getErrorCode() + ", errInfo:"                            + amapLocation.getErrorInfo());                }            }        }    };    private AMap aMap;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mMapView = (MapView) findViewById(R.id.map);        //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图        mMapView.onCreate(savedInstanceState);        aMap = mMapView.getMap();        getloation();    }    private void getloation() {        MyLocationStyle myLocationStyle;        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。        myLocationStyle.showMyLocation(true);//设置是否显示定位小蓝点,用于满足只想使用定位,不想使用定位小蓝点的场景,设置false以后图面上不再有定位蓝点的概念,但是会持续回调位置信息        myLocationStyle.anchor(0.0f,1.0f);//设置定位蓝点图标的锚点方法。        //初始化定位        mLocationClient = new AMapLocationClient(getApplicationContext());        //设置定位回调监听        mLocationClient.setLocationListener(mLocationListener);        //初始化AMapLocationClientOption对象        mLocationOption = new AMapLocationClientOption();        //设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。        mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);        //获取一次定位结果:        //该方法默认为false。        mLocationOption.setOnceLocation(true);        //获取最近3s内精度最高的一次定位结果:        //设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。        mLocationOption.setOnceLocationLatest(true);        //设置定位间隔,单位毫秒,默认为2000ms,最低1000ms。        mLocationOption.setInterval(1000);        //设置是否返回地址信息(默认返回地址信息)        mLocationOption.setNeedAddress(true);        //设置是否允许模拟位置,默认为true,允许模拟位置        mLocationOption.setMockEnable(true);        //单位是毫秒,默认30000毫秒,建议超时时间不要低于8000毫秒。        mLocationOption.setHttpTimeOut(10000);        //关闭缓存机制        mLocationOption.setLocationCacheEnable(true);        //给定位客户端对象设置定位参数        mLocationClient.setLocationOption(mLocationOption);        //启动定位        mLocationClient.startLocation();    }    @Override    protected void onDestroy() {        super.onDestroy();        mMapView.onDestroy();    }    @Override    protected void onResume() {        super.onResume();        mMapView.onResume();    }    @Override    protected void onPause() {        super.onPause();        mMapView.onPause();    }    @Override    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {        super.onSaveInstanceState(outState, outPersistentState);        mMapView.onSaveInstanceState(outState);    }}
原创粉丝点击