若是地图功能随处可见,应用很广,这里利用高德地图的SDK来实现地图的显示以及定位功能。如须要详细了解参考官网信息http://lbs.amap.com/api/android-sdk/summaryhtml
使用高德地图你还得须要一个key。注册一个高德地图帐号,在开发者平台 进入右上角的控制台,在应用管理中新建一个应用就能够获取到key了。java
首先官网下载SDK包http://lbs.amap.com/api/android-sdk/download,若是你下载的是2D地图则只有一个jar包,拷贝放入项目的libs文件夹里面,右键选择add as library便可。若是是3D包的话,则里面除了一个jar还有相关的so文件,你不只要导入jar还得导入相关so文件。在main文件夹下建一个jnilibs文件夹,把全部的so文件放进去便可。如图android
而后注册文件中加个meta-data,里面的name是固定的,可是value是你获取的key。加相关权限,权限有点多,管它有没有用,都加上。git
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.gdmap"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <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"> <!--value处加上本身申请的key--> <meta-data android:name="com.amap.api.v2.apikey" android:value="1bfdd3600775f90d9953ca0351836006"/> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
布局文件中写一个地图视图api
<com.amap.api.maps.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent"/>
package com.example.gdmap; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; 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.LocationSource; import com.amap.api.maps.MapView; import com.amap.api.maps.UiSettings; public class MainActivity extends AppCompatActivity implements LocationSource,AMapLocationListener{ MapView mapView=null;//地图视图 AMap aMap;//地图对象 OnLocationChangedListener mlistener;//定位监听 AMapLocationClient client;//定位者 AMapLocationClientOption option;//定位参数 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mapView= (MapView) findViewById(R.id.map); mapView.onCreate(savedInstanceState);//建立地图 init(); } public void init(){ aMap=mapView.getMap();//获取地图对象 UiSettings settings=aMap.getUiSettings();//获取定位按钮 aMap.setLocationSource(this);//设置定位监听 settings.setMyLocationButtonEnabled(true);//显示定位按钮 aMap.setMyLocationEnabled(true);//显示定位层并可触发定位 } //activate初始化定位 @Override public void activate(OnLocationChangedListener onLocationChangedListener) { mlistener=onLocationChangedListener; client=new AMapLocationClient(this); client.setLocationListener(this);//定位回调监听 option=new AMapLocationClientOption(); option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//高进度定位 client.setLocationOption(option);//加载定位参数 client.startLocation();//开始定位 } //deactivate中止定位 @Override public void deactivate() { mlistener = null; if (client != null) { client.stopLocation(); client.onDestroy(); } client = null; } //定位成功后回调函数 @Override public void onLocationChanged(AMapLocation aMapLocation) { if(mlistener!=null){ if(aMapLocation!=null&&aMapLocation.getErrorCode()==0){ Log.e("经度: ", String.valueOf(aMapLocation.getLatitude())); Log.e("纬度: ", String.valueOf(aMapLocation.getLongitude())); Log.e("地址:",aMapLocation.getAddress()); mlistener.onLocationChanged(aMapLocation); } else Log.e("定位结果","定位失败"); } } @Override protected void onDestroy() { super.onDestroy(); mapView.onDestroy(); if(client!=null) client.onDestroy(); } }
<service android:name="com.amap.api.location.APSService"></service>
最后来一张效果图app