首先咱們要區分清楚,百度地圖這是一個普遍的概念,不少剛剛接觸這個名詞」百度地圖api」,的確是泛泛而談,咱們來看一下百度地圖的官網:php
android上使用百度地圖的有Android地圖SDK,定位SDK,導航SDK,全景SDK......等等雖然平時項目中可能會用到,可是不必定每個SDK都能熟練掌握,xamarin android中如何使用百度地圖的這些SDK呢,好吧,說這麼多廢話其實我想寫的就是html
第一步:建立Binding Labrary(Android)android
第二步:下載百度地圖 Android定位SDK http://lbsyun.baidu.com/index.php?title=android-locsdk/geosdk-android-downloadgit
第三步:在Jars文件夾下添加jar文件,並將jar文件的生成操做改成Embedded.jar如圖:api
從新生成立刻就會報這個錯誤:網絡
只須要打開項目DWService - Transforms文件夾 修改Transforms-metadata.xml文件爲如下,就不會生成錯誤。app
<metadata> <attr path="/api/package[@name='com.baidu.location']/class[@name='Address']/field[@name='address']" name="name">Addresses</attr> </metadata>新建文件夾Assets:把下載的如下文件粘貼到Assets文件夾下,並將so文件的生成操做修改成EmbeddedNativeLibrary第四步:到了最關鍵的時候,若是不是很明白這一步的操做,能夠百度一下。這一步的目的是獲取訪問應用(AK)如圖:
建立應用後,填寫SHA1,那麼如何獲取SHA1的方法有不少,看了不少博客,可是Xamarin android 獲取sha1這種方式 在Dos中輸入命令的方式有時候沒有做用,以前在我筆記本上的操做竟然沒有做用,有點鬱悶,我這個臺式又能夠獲取 。 輸入路徑 :C:\Users\zhanglin\AppData\Local\Xamarin\Mono for Android 命令:keytool -list -v -keystore debug.keystore 輸入密鑰口令:直接回車鍵,若是不行的輸入Android。建立應用的時候包名就是AndroidManifest.xml文件中package屬性的值
固然你能夠用其餘的方式獲取sha1,下載MCodeCheck,也能夠查看sha1值ide
第五步:建立一個Android項目並添加引用,引用就是項目-解決方案新建的這個BaiduServer函數
第六步:在Android項目中的AndroidManifest.xml文件中進行一下配置:ui
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="BaiduDW.BaiduDW" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="16" /> <application android:label="BaiduDW"> <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"> </service> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="CUm5LGTd4Y38YLXXzs3xjfNa0dvV8BOT" /> //key:開發者申請的Key </application> <!-- 這個權限用於進行網絡定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> <!-- 這個權限用於訪問GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <!-- 用於訪問wifi網絡信息,wifi信息會用於進行網絡定位--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <!-- 獲取運營商信息,用於支持提供運營商信息相關的接口--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <!-- 這個權限用於獲取wifi的獲取權限,wifi信息會用來進行網絡定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> <!-- 用於讀取手機當前的狀態--> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <!-- 寫入擴展存儲,向擴展卡寫入數據,用於寫入離線定位數據--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <!-- 訪問網絡,網絡定位須要上網--> <uses-permission android:name="android.permission.INTERNET" /> <!-- SD卡讀取權限,用戶寫入離線定位數據--> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission> </manifest>在MainActivity.cs中引入Com.Baidu.Location , System.Text,並實現接口IBDLocationListener,例子代碼是百度官方的。所實現的效果調試中的輸出能夠看到。
using System; using Android.App; using Android.OS; using Com.Baidu.Location; using System.Text; namespace BaiduMapDemo { [Activity(Label = "BaiduMapDemo", MainLauncher = true, Icon = "@drawable/icon")] public class MainActivity : Activity,IBDLocationListener { int count = 1; public LocationClient mLocationClient = null; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView(Resource.Layout.Main); mLocationClient = new LocationClient(ApplicationContext); //聲明LocationClient類 mLocationClient.RegisterLocationListener(this); //註冊監聽函數 StartLocationService(); } private void StartLocationService() { LocationClientOption option = new LocationClientOption(); option.SetLocationMode(LocationClientOption.LocationMode.HightAccuracy);//可選,默認高精度,設置定位模式,高精度,低功耗,僅設備 option.CoorType = "bd09ll";//可選,默認gcj02,設置返回的定位結果座標系 int span = 1000; option.ScanSpan = span;//可選,默認0,即僅定位一次,設置發起定位請求的間隔須要大於等於1000ms纔是有效的 option.SetIsNeedAddress(true);//可選,設置是否須要地址信息,默認不須要 option.OpenGps = true;//可選,默認false,設置是否使用gps option.LocationNotify = true;//可選,默認false,設置是否當GPS有效時按照1S/1次頻率輸出GPS結果 option.SetIsNeedLocationDescribe(true);//可選,默認false,設置是否須要位置語義化結果,能夠在BDLocation.getLocationDescribe裏獲得,結果相似於「在北京天安門附近」 option.SetIsNeedLocationPoiList(true);//可選,默認false,設置是否須要POI結果,能夠在BDLocation.getPoiList裏獲得 option.SetIgnoreKillProcess(false);//可選,默認true,定位SDK內部是一個SERVICE,並放到了獨立進程,設置是否在stop的時候殺死這個進程,默認不殺死 option.SetIgnoreCacheException(false);//可選,默認false,設置是否收集CRASH信息,默認收集 option.EnableSimulateGps = false;//可選,默認false,設置是否須要過濾GPS仿真結果,默認須要 mLocationClient.LocOption = option; mLocationClient.Start(); } public void OnReceiveLocation(BDLocation location) { StringBuilder sb = new StringBuilder(); sb.Append("time : "); sb.Append(location.Time); sb.Append("\nerror code : "); sb.Append(location.LocType); sb.Append("\nlatitude : "); sb.Append(location.Latitude); sb.Append("\nlontitude : "); sb.Append(location.Longitude); sb.Append("\nradius : "); sb.Append(location.Radius); if (location.LocType == BDLocation.TypeGpsLocation) {// GPS定位結果 sb.Append("\nspeed : "); sb.Append(location.Speed);// 單位:千米每小時 sb.Append("\nsatellite : "); sb.Append(location.SatelliteNumber); sb.Append("\nheight : "); sb.Append(location.Altitude);// 單位:米 sb.Append("\ndirection : "); sb.Append(location.Direction);// 單位度 sb.Append("\naddr : "); sb.Append(location.AddrStr); sb.Append("\ndescribe : "); sb.Append("gps定位成功"); } else if (location.LocType == BDLocation.TypeNetWorkLocation) {// 網絡定位結果 sb.Append("\naddr : "); sb.Append(location.AddrStr); //運營商信息 sb.Append("\noperationers : "); sb.Append(location.Operators); sb.Append("\ndescribe : "); sb.Append("網絡定位成功"); } else if (location.LocType == BDLocation.TypeOffLineLocation) {// 離線定位結果 sb.Append("\ndescribe : "); sb.Append("離線定位成功,離線定位結果也是有效的"); } else if (location.LocType == BDLocation.TypeServerError) { sb.Append("\ndescribe : "); sb.Append("服務端網絡定位失敗,能夠反饋IMEI號和大致定位時間到loc-bugs@baidu.com,會有人追查緣由"); } else if (location.LocType == BDLocation.TypeNetWorkException) { sb.Append("\ndescribe : "); sb.Append("網絡不一樣致使定位失敗,請檢查網絡是否通暢"); } else if (location.LocType == BDLocation.TypeCriteriaException) { sb.Append("\ndescribe : "); sb.Append("沒法獲取有效定位依據致使定位失敗,通常是因爲手機的緣由,處於飛行模式下通常會形成這種結果,能夠試着重啓手機"); } sb.Append("\nlocationdescribe : "); sb.Append(location.LocationDescribe);// 位置語義化信息 System.Collections.Generic.IList<Poi> list = location.PoiList;// POI數據 if (list != null) { sb.Append("\npoilist size = : "); sb.Append(list.Count.ToString()); foreach (Poi p in list) { sb.Append("\npoi= : "); sb.Append(p.Id + " " + p.Name + " " + p.Rank); } } System.Diagnostics.Debug.Write(sb.ToString()); } } }
關於android中使用gps定位獲取位置相關信息:http://blog.csdn.net/kebi007/article/details/74936979
做者:張林
標題:xamarin android如何調用百度地圖入門示例(一)原文地址:http://blog.csdn.net/kebi007/article/details/52887570
轉載隨意註明出處