Xamarin.Forms 調用 騰訊地圖SDK

来源:http://www.cnblogs.com/loda7023link/archive/2017/02/26/6443225.html
-Advertisement-
Play Games

Xamarin.Forms研究了好一段時間了,最近一直在學習中,想嘗試一下調用其他的SDK,就如騰訊地圖SDK(申請容易)。 完成此次項目得感謝以下鏈接: http://www.cnblogs.com/jtang/p/4698496.html 其他文檔參考: 騰訊地圖SDK(安卓)文檔 這裡面有詳細 ...


Xamarin.Forms研究了好一段時間了,最近一直在學習中,想嘗試一下調用其他的SDK,就如騰訊地圖SDK(申請容易)。

完成此次項目得感謝以下鏈接:

http://www.cnblogs.com/jtang/p/4698496.html

 

其他文檔參考:

騰訊地圖SDK(安卓)文檔 這裡面有詳細的使用過程(當然裡面的代碼是不適用C#的,不過要從這裡下載SDK,也有如何申請Key的過程,請參考閱讀)

Xamarin.Forms自定義每個平臺的控制項文檔 裡面有如何根據不同的平臺條件下,調用其他頁面的過程

Xamarin.Android綁定Java庫文檔 這裡面是把其他軟體的SDK Jar包轉化為 C# DLL的過程,轉換了才可用(當然還有看IOS和Windows的,不過博主的手機是安卓,方便調試)

 

萬事具備後,開始調用騰訊地圖了。

 

1、創建一個Cross-Platform項目(Xamarin.Forms模板,PCL項目)博主是Xamarin_Setup 2.3.0.XXX(2017-2-23日晚更新的)版本,如果用VS2017開發,也是這個創建界面,如果是VS2015,而且更新了最新版的Xamarin,也是這個新的創建界面,下一個界面繼續選擇PCL或SAP;如果是VS2015 而且Xamarn的版本是2.2.X.XXX,就會在第一個界面顯示所有的選項,也是選Xamarin Forms Xaml ( Portable Class Labrary )就可以了。

 

2、創建項目後,先生成運行一遍,建議直接用手機調試(沒錯,博主用的是紅米3)。如果這樣都不能調試運行成功的話,建議先配置好自己的環境,不然下麵做不下了。

 

3、右擊解決方案,新建一個項目,用來把騰訊地圖的jar轉換成DLL。

 

4、創建完成後,在騰訊官網下載的SDK裡面的libs文件夾裡面有相應 .jar文件,添加到Jars文件夾,並且把jar文件的生成操作改為EmbeddedJar。

 

5、右擊TencentMapDemo.AndroidJavaBinding項目,點擊生成,發現報了一些錯誤和警告(警告有多少都不用管,不影響調用)

 

6、隨便點擊第一個錯誤,會轉到 Com.Tencent......MapController.cs,其實錯誤很明顯,就是含有相同的函數名,調用的使用不知道調用哪一個函數。至於這個是為什麼,沒有深入研究,希望大神能解答一下。好了,我們直接把這個類的所有方法刪除,就留下一個空類就好了。

 

 7、右擊TencentMapDemo.AndroidJavaBinding項目,點擊生成,生成成功後,在當前項目的文件目錄裡面/bin/debug/,生成了一個DLL,這個就是我們要調用的庫。

 

8、右擊安卓項目,把剛纔的DLL添加到引用裡面。

 

 9、右擊Android,打開屬性,在 Android清單 裡面的許可權,勾選以下許可權。

 

 

 10、在Android項目里,創建一個類:TencentMapRenderer.cs,代碼引用參考如下,請註意註釋。

 

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 
  6 using Android.App;
  7 using Android.Content;
  8 using Android.OS;
  9 using Android.Runtime;
 10 using Android.Views;
 11 using Android.Widget;
 12 using Xamarin.Forms.Platform.Android;
 13 using Xamarin.Forms;
 14 using TencentMapDemo;
 15 using TencentMapDemo.Droid;
 16 using Com.Tencent.Tencentmap.Mapsdk.Map;
 17 using Com.Tencent.Mapsdk.Raster.Model;
 18 
 19 //ExportRenderer向自定義渲染器類添加屬性以指定它將用於渲染Xamarin.Forms自定義地圖。此屬性用於向Xamarin.Forms註冊自定義渲染器。第一個是用來承載的界面,第二個是要引用的界面
 20 [assembly: ExportRenderer(typeof(MainPage), typeof(TencentMapRenderer))]
 21 namespace TencentMapDemo.Droid
 22 {
 23     public class TencentMapRenderer : PageRenderer
 24     {
 25         /// <summary>
 26         /// 騰訊地圖視圖
 27         /// </summary>
 28         private MapView mapView;
 29 
 30         /// <summary>
 31         /// 佈局
 32         /// </summary>
 33         private LinearLayout layout;
 34 
 35         protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
 36         {
 37             base.OnElementChanged(e);
 38 
 39             if (e.NewElement == null || e.OldElement != null)
 40             {
 41                 return;
 42             }
 43 
 44             //e.NewElement就是承載的界面,這裡就是PCL項目裡面的MainPage
 45             var mainPage = e.NewElement as MainPage;
 46 
 47             //初始化mapView
 48             mapView = new MapView(this.Context);
 49             mapView.OnCreate(null);
 50 
 51             //初始化視圖
 52             layout = new LinearLayout(this.Context);
 53             layout.AddView(mapView);
 54             this.AddView(layout);
 55 
 56             //這裡可以比對以下我們的寫法跟騰訊官網裡Java寫法的區別,可以看出Java裡面的屬性是set,get首碼,而在C#裡面都被隱藏了,直接用C#慣用的屬性寫法來代替,而方法則還是同樣的SetXXX(),GetXXX(),但是Java是camelCasing,C#用PascalCasing寫法(博主非常喜歡C#寫法,而很討厭Java的寫法 :-))。這些區別,都是Xamarin 里 綁定Java庫的轉換規則。 
 57 
 58             #region TencentMap類
 59             //騰訊地圖的設置是通過TencentMap類進行設置,可以控制地圖的底圖類型、顯示範圍、縮放級別、添加 / 刪除marker和圖形,此外對於地圖的各種回調監聽也是綁定到TencentMap。下麵是TencentMap類的使用示例:
 60 
 61             //獲取TencentMap實例
 62             TencentMap tencentMap = mapView.Map;
 63             //設置實時路況開啟
 64             tencentMap.TrafficEnabled = true;
 65             //設置地圖中心點
 66             tencentMap.SetCenter(new Com.Tencent.Mapsdk.Raster.Model.LatLng(22.500980, 113.057899));
 67             //設置縮放級別
 68             tencentMap.SetZoom(11);
 69             #endregion
 70 
 71             #region UiSettings類
 72             //UiSettings類用於設置地圖的視圖狀態,如Logo位置設置、比例尺位置設置、地圖手勢開關等。下麵是UiSettings類的使用示例:
 73 
 74             //獲取UiSettings實例
 75             UiSettings uiSettings = mapView.UiSettings;
 76             //設置logo到屏幕底部中心
 77             uiSettings.SetLogoPosition(UiSettings.LogoPositionCenterBottom);
 78             //設置比例尺到屏幕右下角
 79             uiSettings.SetScaleViewPosition(UiSettings.ScaleviewPositionRightBottom);
 80             //啟用縮放手勢(更多的手勢控制請參考開發手冊)
 81             uiSettings.SetZoomGesturesEnabled(true);
 82             #endregion
 83 
 84             #region 使用marker
 85             //註意,這裡要往resources/drawable/里添加一個red_location.png的圖片
 86             var bitmap = Resources.GetBitmap("red_location.png");
 87             BitmapDescriptor des = new BitmapDescriptor(bitmap);
 88             foreach (var item in mainPage.Options)
 89             {
 90                 MarkerOptions options = new MarkerOptions();
 91                 
 92                 options.InvokeIcon(des);
 93                 options.InvokeTitle(item.Title);
 94                 options.Anchor(0.5f, 0.5f);
 95                 options.InvokePosition(new LatLng(item.Lat, item.Lng));
 96                 options.Draggable(true);
 97                 Marker marker = mapView.AddMarker(options);
 98                 marker.ShowInfoWindow();
 99             }
100 
101             #endregion
102 
103         }
104 
105         protected override void OnLayout(bool changed, int l, int t, int r, int b)
106         {
107             base.OnLayout(changed, l, t, r, b);
108             var msw = Android.Views.View.MeasureSpec.MakeMeasureSpec(r - l, MeasureSpecMode.Exactly);
109             var msh = Android.Views.View.MeasureSpec.MakeMeasureSpec(b - t, MeasureSpecMode.Exactly);
110             layout.Measure(msw, msh);
111             layout.Layout(0, 0, r - l, b - t);
112         }
113     }
114 }
View Code

 

 11、在Andriod項目,雙擊打開Properties里的AndroidManifest.xml,在<application><application>里添加在騰訊申請的Key(如果不添加,則會在地圖中,有一個警告文字出現)

<meta-data android:name="TencentMapSDK" android:value="你申請的Key"/>

 

 

12、在PCL項目里,修改App.xaml,代碼如下:

 1         public App()
 2         {
 3             InitializeComponent();
 4 
 5             var options = new List<Option>(){
 6                 new Option() { Title="新會區",Lat=22.458680,Lng=113.032400},
 7                 new Option() { Title="蓬江區",Lat=22.594994,Lng=113.071976},
 8                 new Option() {Title="江海區",Lat=22.549977,Lng=113.117981 }
 9             };
10 
11 
12             MainPage = new NavigationPage(new MainPage() { Options = options });
13         }

 

 

13、在PCL項目里,修改MainPage.xaml,代碼如下:

1 <?xml version="1.0" encoding="utf-8" ?>
2 <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
3              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
4              xmlns:local="clr-namespace:TencentMapDemo"
5              x:Class="TencentMapDemo.MainPage"
6              Title="騰訊地圖調用Demo">
7     <!--這裡把預設的Label刪除-->
8 </ContentPage>

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using Xamarin.Forms;
 7 
 8 namespace TencentMapDemo
 9 {
10     public partial class MainPage : ContentPage
11     {
12         public IEnumerable<Option> Options;
13 
14         public MainPage()
15         {
16             InitializeComponent();
17         }   
18     }
19 
20     /// <summary>
21     /// 標記類
22     /// </summary>
23     public class Option
24     {
25         /// <summary>
26         /// 標題
27         /// </summary>
28         public string Title { get; set; }
29 
30         /// <summary>
31         /// 緯度
32         /// </summary>
33         public double Lat { get; set; }
34 
35         /// <summary>
36         /// 經度
37         /// </summary>
38         public double Lng { get; set; }
39 
40     }
41 }
View Code

 

 

14、最後生成並調試,效果如下:

 

如果有任何問題,可以拍磚(不過博主很少登錄查留言的),最好還是聯繫我的QQ吧:492683562

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • -html概念:hyper Text Markup Language (超文本標記語言) Html標簽分類: 1 雙標簽 2 單標簽 Html標簽之間的關係: 1 嵌套關係 2 併列關係 Html單標記: 橫線標記 <hr> 換行標記<br> 註釋標記<!– 註釋文本--> ctrl+/ Html雙 ...
  • css的border屬性相信大家都不陌生了,就是給元素加個邊框嘛,在不同的盒模型下,會給元素的寬高帶來怎樣的影響,相信大家也都很熟悉了,這裡就不再贅述,只說說大家平時沒有怎麼留意的東西。 0.border-color與color 大家平時使用border屬性的時候,通常應該是直接寫border:1p ...
  • JavaScript 數據類型 JavaScript 變數 Javascript 運算符 JavaScript 流程式控制制 JavaScript 數組 JavaScript 函數基礎 JavaScript 字元串函數 JavaScript 正則表達式 DOM 基本操作 Window 對象 ...
  • 第一部分 HTML 第一章 職業規劃和前景 職業方向規劃定位: web前端開發工程師 web網站架構師 自己創業 轉崗管理或其他 web前端開發的前景展望: 未來IT行業企業需求最多的人才 結合最新的html5搶占移動端的市場 自己創業做老闆 隨著互聯網的普及web開發成為企業的寵兒和核心 web職 ...
  • 俗話說的好,框架是服務與大家的,包含的功能比較多,代碼多。在現在追求速度的年代。應該根據自己的需求去封裝自己所需要的組件。 下邊就給大家介紹一下自己封裝的一個小彈框組件,不依賴與jQuery,代碼少,適用於一般移動端小項目。 這個插件名稱:MobileUi 包含功能:彈框,正在載入,tips1.5秒 ...
  • 不用JavaScript也能實現閱讀進度條 看圖說話 直接上代碼 ...
  • ▓▓▓▓▓▓ 大致介紹 JavaScript的簡單數據類型包括:Undefined、Null、Boolean、Number、String。JavaScript中這五種基本數據類型不是對象,其他所有值都是對象。其中還有一些對象子類型,通常被稱為內置對象(引用類型) 1、Object 2、Array 3 ...
  • 1.window常用的屬性: ①history ②location 2.history對象的方法: ①back() ②forward() ③go() 3.location對象的屬性: ①host() ②hostname() ③href() 4.location對象的方法: ①reload() ②re ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...