Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Xamarin android如何調用百度地圖入門示例(一)

Xamarin android如何調用百度地圖入門示例(一)

編輯:關於Android編程

在Xamarin android如何調用百度地圖呢?

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

\

android上使用百度地圖的有Android地圖SDK,定位SDK,導航SDK,全景SDK......等等雖然平時項目中可能會用到,但是不一定每一個SDK都能熟練掌握,xamarin android中如何使用百度地圖的這些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文件中進行一下配置:

 



  
  
    
    
     //key:開發者申請的Key
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
在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號和大體定位時間到[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.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());
        }
    }
}
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved