編輯:關於Android編程
首先我們要區分清楚,百度地圖這是一個廣泛的概念,很多剛剛接觸這個名詞”百度地圖api”,的確是泛泛而談,我們來看一下百度地圖的官網:
android上使用百度地圖的有Android地圖SDK,定位SDK,導航SDK,全景SDK......等等雖然平時項目中可能會用到,但是不一定每一個SDK都能熟練掌握,xamarin android中如何使用百度地圖的這些SDK呢,好吧,說這麼多廢話其實我想寫的就是
第一步:創建Binding Labrary(Android)
第二步:下載百度地圖 Android定位SDKhttp://lbsyun.baidu.com/index.php?title=android-locsdk/geosdk-android-download
第三步:在Jars文件夾下添加jar文件,並將jar文件的生成操作改為Embedded.jar如圖:
重新生成馬上就會報這個錯誤:
只需要打開項目DWService - Transforms文件夾 修改Transforms-metadata.xml文件為以下,就不會生成錯誤。
Addresses
新建文件夾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值
第五步:創建一個Android項目並添加引用,引用就是項目-解決方案新建的這個BaiduServer
第六步:在Android項目中的AndroidManifest.xml文件中進行一下配置:
在MainActivity.cs中引入Com.Baidu.Location , System.Text,並實現接口IBDLocationListener,例子代碼是百度官方的。所實現的效果調試中的輸出可以看到。//key:開發者申請的Key
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號和大體定位時間到[email protected],會有人追查原因"); } 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.IListlist = 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()); } } }
.xml代碼如下: .java代碼如下: package org.lxh.demo; import android.app.
Android異步更新UI-線程池-Future-Handler實例分析 前言: 我們在開發Android過程中,在處理耗時任務和UI交互的過程中,都會將耗時任務放到子
前言最近在項目中遇到一個問題,要求顯示下面的效果。如圖所示,“所屬農莊”必須緊挨在“商品名字”後面,但當商品名
我們知道有不少開源工程,能實現很多不錯的效果。前幾天,我看了一個效果,剛好項目中也用到了這個jar包。沒事挖一挖 學一學(一說到挖一挖,那麼問題來了,挖掘機技術到底哪家強