這次跟各位分享一個地圖的SDK。先說說為什么拿Mapbox來用吧鸥鹉。
首先就是——國際化布持。當需求要顯示國外的地理位置信息的時候,通常使用的是Google Map。但是Google Map目前需要手機帶有完整的Google Play套件才行碴犬,但是基本上所有的國內(nèi)上市的手機都把Google Play套件閹割了絮宁。然后就是偏移量,從目前來看服协,Mapbox的路網(wǎng)和衛(wèi)星照片是重合的绍昂,而Google Map則是有一定的偏移,尤其是在中國偿荷。最后呢窘游,Mapbox的集成方式實在是太簡單了。不過呢遭顶,說了這么多優(yōu)點张峰,再說一個缺點。就是Mapbox的衛(wèi)星照片略慢棒旗,尤其是中國喘批,某些地方還停留在幾年前的樣子,這個以年為單位铣揉,一點都不夸張饶深。
如果你需要做海外的地圖定位,個人認為逛拱,Mapbox可作為首選敌厘。
下面說一下具體的集成方法。
首先朽合,需要去官網(wǎng)注冊一個賬號俱两,這里附上官網(wǎng)地址鏈接:
https://www.mapbox.com/
注冊完成后,進入網(wǎng)頁Studio界面曹步,我們會輕松找到Access Token宪彩。我們后面會用到。
然后新建一個Android項目讲婚,這里推薦targetAPI<23尿孔,但是必須大于15。
在app目錄下的build.gradle文件中添加下面的內(nèi)容筹麸,用來導入依賴庫活合。
repositories{mavenCentral()}
compile('com.mapbox.mapboxsdk:mapbox-android-sdk:4.2.0@aar') {
transitive = true
}
這里注意版本,雖然復制粘貼過去沒有問題物赶,但是依賴庫的版本還在不斷更新白指,也許下一秒就發(fā)布4.2.1或者其他什么版本,所以這個還是有必要直接去官網(wǎng)上看一下酵紫。網(wǎng)址在此:
https://www.mapbox.com/android-sdk/
下一步我們在布局文件中添加地圖控件侵续,很簡單倔丈,最簡易的寫法可以像下面這樣:
<com.mapbox.mapboxsdk.maps.MapView
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
當然,我們需要顯示一個自己比較熟悉的位置状蜗,而且還要能夠看得足夠清晰需五,可以寫成像下面這樣:
<com.mapbox.mapboxsdk.maps.MapView
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
mapbox:center_latitude="39.069"
mapbox:center_longitude="117.221"
mapbox:style_url="@string/style_satellite_streets"
mapbox:zoom="15" />
這里提醒一下,在xml最上方加上命名空間轧坎,否則會報錯:
xmlns:mapbox="http://schemas.android.com/apk/res-auto"
這樣做宏邮,可以同時顯示路網(wǎng)和衛(wèi)星照片,雖然衛(wèi)星照片可能比較過時缸血,但是確實很清楚蜜氨。而且可以稍微移動一下,看看國外的風景捎泻,情況就大不一樣了飒炎。
下一步需要在Activity中完成初始化等操作,在onCreate()方法中添加如下代碼:
setContentView(R.layout.activity_main);
MapboxAccountManager.start(this, getString(R.string.access_token));
mv = (MapView) findViewById(R.id.mapview);
mv.onCreate(savedInstanceState);
mv.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(MapboxMap mapboxMap) {
}
});
當然笆豁,這只是個例子郎汪。
這里要注意的就是必須在Activity中的各個生命周期中添加相應的方法,比如onResume()中闯狱,需要加上:
mv.onResume();
其他生命周期回調(diào)類似煞赢。
最后在AndroidManifest.xml中做好相關(guān)權(quán)限聲明:
<uses-permission android:name="android.permission.ACCESS_NETWORK_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.INTERNET" />
還有一個Service:
<service android:name="com.mapbox.mapboxsdk.telemetry.TelemetryService" />
該Service在Application節(jié)點內(nèi)。
好了哄孤,運行一下吧照筑,一切順利的話就可以看到地圖的顯示了。
下面附上完整的項目源碼:
https://github.com/XiaoWenHan/MapboxAndroidDemo