編輯:關於Android編程
首先我們要區分清楚,百度地圖這是一個廣泛的概念,很多剛剛接觸這個名詞”百度地圖api”,的確是泛泛而談,我們來看一下百度地圖的官網:

android上使用百度地圖的有Android地圖SDK,定位SDK,導航SDK,全景SDK......等等雖然平時項目中可能會用到,但是不一定每一個SDK都能熟練掌握,xamarin android中如何使用百度地圖的這些SDK呢,好吧,說這麼多廢話其實我想寫的就是
下面主要流程分為以下幾步:
新建項目 Binging Labrary(android)下載百度地圖 --Android定位SDK Binging Labrary項目添加相關文件注冊百度開發平台,創建應用,獲取AK(要注意這一點)創建Android項目引用Binging Labrary項目寫入百度提供示例代碼,成功。
第一步:創建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號和大體定位時間到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 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());
}
}
}
安卓--異步處理工具類(AsyncTask)
.xml代碼如下: .java代碼如下: package org.lxh.demo; import android.app.
Android異步更新UI-線程池-Future-Handler實例分析
Android異步更新UI-線程池-Future-Handler實例分析 前言: 我們在開發Android過程中,在處理耗時任務和UI交互的過程中,都會將耗時任務放到子
Android中layout_align****和setPadding方法整合
前言最近在項目中遇到一個問題,要求顯示下面的效果。如圖所示,“所屬農莊”必須緊挨在“商品名字”後面,但當商品名
Android中通過ViewHelper.setTranslationY實現View移動控制(NineOldAndroids開源項目)
我們知道有不少開源工程,能實現很多不錯的效果。前幾天,我看了一個效果,剛好項目中也用到了這個jar包。沒事挖一挖 學一學(一說到挖一挖,那麼問題來了,挖掘機技術到底哪家強