Xamarin.Android 集成百度地圖SDK


前言:趁着周六閑得沒事干,趕緊搞一搞Xamarin,最近也是怪無聊的,枯燥的生活不如打幾行代碼帶勁;好了我們進入正題

我這篇文章時參考一位大佬的博客進行改變的,當然他寫的需要一定的經驗才可以看得懂,我為了小白還是改編了一下,這篇文章的傳送門

正文:

  1.創建SDK

  2.獲取SHA1

  3.項目集成

  4.問題處理

首先呢,你要注冊百度賬號,我相信大家都應該有了,那么登錄之后,點擊控制台,其百度地圖的官方地址:http://lbsyun.baidu.com/

如圖所示;創建SDK是需要SHA1的,那我們如何獲取呢,找到你安裝Xamarin的位置,一般都是C盤Program Files\Java 要不然就是C:\Program Files (x86)\Java 

獲取sha1的相關步驟:

1.進去Java文件夾里面之后再進入bin文件夾,再之后你看看有沒有keytool.exe文件,如何有的話就沒有任何問題了。

2.找到debug.keystore文件,一般是 C:\Users\ **********\AppData\Local\Xamarin\Mono for Android文件夾,還是一樣如果你有這個文件,那也就沒有任何問題。

3.打開Cmd,最好還是通過管理員進去工具。

  首先cd進去到你的keytool所在的文件夾bin中,輸入命令 keytool.exe -list -v -keystore "%LocalAppData%\Xamarin\Mono for Android\debug.keystore"   輸入密鑰庫口令: android 回車;

找到SHA1那一行復制,一定要復制成功啊,要不然還得操作一遍,關閉窗口,繼續干。

 還記得剛才的頁面嗎,寫上你的SHA1,然后點擊提交,就ok了。

百度地圖SDK

打開界面http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download 去下載你的SDK(這個操作你需要去創建Xamarin binding 項目去生成你的dll)這個過程就是將Java的jar變成.net的dll

為簡單考慮,這里就不寫這個了,直接去下載生成好的dll去用吧,因為現在百度地圖的sdk版本有點高,我這里實在是生成不通過,只能去用4.5版本的,如果大佬有通過5.5版本的請聯系樓主!!必有重謝

附4.5版本的dll一份,將就着用吧。地址:鏈接:https://pan.baidu.com/s/1yb2a1dldI6DZpHTwQrARAQ 提取碼:zjbz(這個鏈接永遠有效)

把這個dll放到bin文件夾中,添加引用即可。

再之后你就需要去配置下AndroidManifest.xml文件了(這個文件放的還挺深的,在Properties文件夾中) 以下是文件初始定義:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
android:versionCode="1" 
android:versionName="1.0" 
package="App1.App1">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="27" />
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme">
</application>
</manifest>

 還記得我們剛才生成的AK嗎?如果你忘記保存,請自行尋找http://lbsyun.baidu.com/apiconsole/key

1.在其中添加開發密鑰

<application>  
    <meta-data  
        android:name="com.baidu.lbsapi.API_KEY"  
        android:value="開發者 key" />   
</application>

 2.添加所需權限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_SETTINGS" />

其完整定義如一下收縮代碼:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
          android:versionCode="1" 
          android:versionName="1.0" 
          package="App1.App1">
  <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="27" />
  <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme">
    <meta-data android:name="com.baidu.lbsapi.API_KEY"  android:value="xxxxxxxxx" />
  </application>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
  <uses-permission android:name="android.permission.WAKE_LOCK"/>
  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  <uses-permission android:name="android.permission.GET_TASKS" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  <uses-permission android:name="android.permission.WRITE_SETTINGS" />
</manifest>

 在Main.xaml中添加地圖控件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_main">

     <com.baidu.mapapi.map.MapView
      android:id="@+id/bmapView"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:clickable="true" />

</RelativeLayout>

  在MainActivity.cs中初始化sdk,那么需要注意的是在SDK各功能組件使用之前都需要調用SDKInitializer.initialize(getApplicationContext());因此我們建議該方法放在Application的初始化方法中。

創建地圖Activity,管理地圖生命周期;這是以下代碼的定義:

using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Com.Baidu.Mapapi;
using Com.Baidu.Mapapi.Map;

namespace Android
{
    [Activity(Label = "@string/app_name", Theme = "@style/AppTheme.NoActionBar", MainLauncher = true)]
    public class MainActivity : Activity
    {
        MapView mMapView = null;

        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SDKInitializer.Initialize(ApplicationContext);
            SetContentView(Resource.Layout.content_main);
            mMapView = FindViewById<MapView>(Resource.Id.bmapView);
            var s = mMapView.Map;
            s.MapType = BaiduMap.MapTypeSatellite;
        }

        protected override void OnDestroy()
        {
            base.OnDestroy();
            mMapView.OnDestroy();
        }

        protected override void OnResume()
        {
            base.OnResume();
            mMapView.OnResume();
        }

        protected override void OnPause()
        {
            base.OnPause();

            mMapView.OnPause();
        }
    }
}

  那么最后最后一個步驟就是把你的包名改變以下就歐克了

  

 這就是基本的百度地圖sdk集成過程,如果你有v5版本的生成dll經驗,請聯系我!!這幾天出支付寶和微信的sdk集成。如果覺得這篇文章還算有用的話,點推薦吧兄台!!

上圖就是結果,ok~就這樣!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM