• Ximarin.Android 百度地图


    一、工欲善其事,必先利其器

        需要准备的工作和资源
      百度地图SDK 该链接下是所有百度地图更新的历史版本,请根据情况下载
      安全码校对工具 检测填写SHA1值是否正确
      
      当前项目的DEMO  Demo下载后需要修改 SHA1

    二、正文

      Demo中有很多不足,为何第二次引用BaiduMap没有

      如何在Xamarin.Forms中引用第三方的SDK,  .OS文件怎么引用

    2.1、新建项目

    2.2、第二导入Jar包,并修改生成操作

    2.3、如果直接生成这个地方会报一个错,我们需要修改Transforms/Metadata.xml配置文件,直接覆盖好啦

       错误:versioninfo成员名称不能与它们的封闭类型相同

    <metadata>
      <!--
      This sample removes the class: android.support.v4.content.AsyncTaskLoader.LoadTask:
      <remove-node path="/api/package[@name='android.support.v4.content']/class[@name='AsyncTaskLoader.LoadTask']" />
      
      This sample removes the method: android.support.v4.content.CursorLoader.loadInBackground:
      <remove-node path="/api/package[@name='android.support.v4.content']/class[@name='CursorLoader']/method[@name='loadInBackground']" />
      -->
      <attr path="/api/package[@name='com.baidu.mapapi']/class[@name='VersionInfo']/field[@name='VERSION_INFO']" name="managedName">VERSION_INFO_</attr>
      <!-- <attr path="/api/package[@name='com.baidu.navisdk.comapi.routeguide']/class[@name='RouteGuideParams.RGKey.CurRoadName']/field[@name='CurRoadName']" name="managedName">CurRoadName_</attr>-->
    
      <!-- <remove-node path="/api/package/class/implements[@name='android.provider.BaseColumns']" />-->
      <!--- <remove-node path="/api/package[@name='com.baidu.navisdk.comapi.mapcontrol']/class[@name='BNMapItemizedOverlay']" />
      <remove-node path="/api/package[@name='com.baidu.navisdk.comapi.routeguide']/class[@name='BNRouteGuider']" /> -->
      <!--  <remove-node path="/api/package[@name='com.baidu.navisdk.comapi.routeguide']/interface[@name='IRGInfoListener']" />
    -->
    
      <!--<remove-node path="/api/package[@name='Com.Baidu.Navisdk.Comapi.Routeguide']/class[@name='AssistInfoHideEventArgs']" /> -->
    
    
      <!--<attr path="/api/package[@name='com.baidu.location.e']" name="managedName">com.baidu.location.ea</attr>
    <attr path="/api/package[@name='com.baidu.location.e']" name="obfuscated" >false</attr>
    <attr path="/api/package[@name='com.baidu.location.e']/interface[@name='v.a']" name="visibility" >public</attr>
    <attr path="/api/package[@name='com.baidu.location.e']/interface[@name='v.a']" name="obfuscated" >false</attr>-->
      <attr path="/api/package[@name='com.baidu.mapapi.map']/interface[@name='Overlay.a']" name="obfuscated" >false</attr>
      <!--<attr path="/api/package[@name='com.baidu.mapapi.map']/class[@name='i']" name="visibility" >public</attr>
    <attr path="/api/package[@name='com.baidu.mapapi.map']/class[@name='i.a']" name="obfuscated" >false</attr>-->
    
      <attr path="/api/package[@name='com.baidu.platform.comapi.util']/class[@name='PermissionCheck.b']" name="obfuscated">false</attr>
      <attr path="/api/package[@name='com.baidu.platform.comapi.util']/class[@name='PermissionCheck.b']" name="managedName">b_</attr>
      <attr path="/api/package[@name='com.baidu.platform.comapi.util']/interface[@name='PermissionCheck.c']" name="obfuscated">false</attr>
    
      <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='MapRenderer']/field[@name='a']" name="managedName">aVar</attr>
      <attr path="/api/package[@name='com.baidu.platform.comapi.map']/interface[@name='MapRenderer.a']" name="obfuscated">false</attr>
    
    
      <attr  path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='B.b']" name="obfuscated">false</attr>
      <attr  path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='b']" name="obfuscated">false</attr>
      <attr  path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='f']" name="obfuscated">false</attr>
      <attr  path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='z']" name="obfuscated">false</attr>
      <attr  path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='y']" name="obfuscated">false</attr>
      <attr  path="/api/package[@name='com.baidu.platform.comjni.map.basemap']/interface[@name='b']" name="obfuscated">false</attr>
      <attr  path="/api/package[@name='com.baidu.platform.comjni.map.basemap']/class[@name='a']" name="obfuscated">false</attr>
    
      <attr path="/api/package[@name='com.baidu.mapapi.map']/class[@name='i']" name="obfuscated" >false</attr>
      <attr path="/api/package[@name='com.baidu.mapapi.map']/class[@name='i']" name="visibility" >public</attr>
      <attr path="/api/package[@name='com.baidu.mapapi.map']/class[@name='j']" name="obfuscated" >false</attr>
    
      <attr path="/api/package[@name='com.baidu.mapapi.map']/class[@name='d']" name="obfuscated" >false</attr>
      <attr path="/api/package[@name='com.baidu.mapapi.map']/class[@name='d']" name="visibility" >public</attr>
    
      <attr path="/api/package[@name='com.baidu.platform.comapi.map']/interface[@name='j.a']" name="obfuscated" >false</attr>
      <!--<attr path="/api/package[@name='com.baidu.mapapi.map']/class[@name='l']" name="visibility" >public</attr>
    <attr path="/api/package[@name='com.baidu.mapapi.map']/class[@name='l.a']" name="obfuscated" >false</attr>
    <attr path="/api/package[@name='com.baidu.mapapi.map']/class[@name='l.a']" name="visibility" >false</attr>-->
    
    
    
    
    
    
      <!--<attr path="/api/package[@name='com.baidu.location.e']/class[@name='v']" name="obfuscated">false</attr>
    <attr path="/api/package[@name='com.baidu.location.e']/class[@name='v']" name="visibility">public</attr>
    <attr path="/api/package[@name='com.baidu.location']/class[@name='Address']/field[@name='address']" name="managedName" >address_</attr>
    <attr path="/api/package[@name='com.baidu.location.b']/interface[@name='b']" name="obfuscated">false</attr>
    <attr path="/api/package[@name='com.baidu.location.b']/interface[@name='f']" name="obfuscated">false</attr>
    <attr path="/api/package[@name='com.baidu.location.e']/class[@name='p']" name="obfuscated">false</attr>
    <attr path="/api/package[@name='com.baidu.location.e']/class[@name='b.a']" name="obfuscated">false</attr>
    <attr path="/api/package[@name='com.baidu.location.e']/class[@name='b.b']" name="obfuscated">false</attr>
    <attr path="/api/package[@name='com.baidu.location']/class[@name='LocationClientOption']/field[@name='a']" name="visibility">public</attr>
    <attr path="/api/package[@name='com.baidu.location']/class[@name='a']" name="obfuscated" >false</attr>
    <attr path="/api/package[@name='com.baidu.location.d']/class[@name='a']" name="obfuscated" >false</attr>
    <attr path="/api/package[@name='com.baidu.location.e']/interface[@name='p.a']" name="obfuscated">false</attr>-->
      <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='q']" name="obfuscated">false</attr>
      <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='t']" name="obfuscated">false</attr>
    
      <!--<attr path="/api/package[@name='com.baidu.speechsynthesizer.data']/interface[@name='SpeechOfflineSynthesizer.a']" name="obfuscated">false</attr>
    <attr path="/api/package[@name='com.baidu.speechsynthesizer.data']/interface[@name='SpeechOfflineSynthesizer.b']" name="obfuscated">false</attr>-->
      <attr path="/api/package[@name='com.baidu.vi']/class[@name='a']" name="obfuscated">false</attr>
      <attr path="/api/package[@name='com.baidu.vi']/class[@name='b']" name="obfuscated">false</attr>
    
    
      <attr path="/api/package[@name='com.baidu.vi']/class[@name='c']" name="obfuscated">false</attr>
      <attr path="/api/package[@name='com.baidu.vi']/class[@name='c']" name="managedName">c_</attr>
    
      <!--导航-->
      <!--has already a definition for Tap-->
      <!--<attr path="/api/package[@name='com.baidu.navisdk.comapi.mapcontrol']/interface[@name='BNMapItemizedOverlay.OnTapListener']/method[@name='onTap' and count(parameter)=2]" name="argsType">TapEventArgs1</attr>
    <attr path="/api/package[@name='com.baidu.navisdk.comapi.mapcontrol']/interface[@name='BNMapItemizedOverlay.OnTapListener']/method[@name='onTap' and count(parameter)=2]" name="managedName">onTap1</attr>
    
    <attr path="/api/package[@name='com.baidu.navisdk.comapi.routeguide']/interface[@name='BNRouteGuider.OnRGSubStatusListener']" name="managedName">OnRGSubStatusListener1</attr>-->
      <!--<attr path="/api/package[@name='com.baidu.navisdk.comapi.routeguide']/interface[@name='OnRGInfoListener']" name="managedName">OnRGInfoListener1</attr>
    
    <attr path="/api/package[@name='com.baidu.navisdk.comapi.routeguide']/class[@name='RouteGuideParams.RGKey.CurRoadName']/field[@name='CurRoadName']" name="managedName">CurRoadName_</attr>-->
      <!--<remove-node path="/api/package[@name='java.util']/interface[@name='Comparator&lt;Java.Lang.Object&gt;']" />-->
    
      <!--<attr path="/api/package[@name='com.baidu.navisdk.ui.widget']/class[@name='BNHorizontalListView']/method[@name='getAdapter' and count(parameter)=0]" name="managedReturn">Java.Lang.Object</attr>
    <attr path="/api/package[@name='com.baidu.navisdk.ui.routeguide.model']/class[@name='RGAssistGuideModel.AssistInfo']/method[@name='compareTo' and count(parameter)=1 and parameter[1][@type='com.baidu.navisdk.ui.routeguide.model.RGAssistGuideModel.AssistInfo']]/parameter[1]" name="managedType">Java.Lang.Object</attr> -->
    
      <attr path="/api/package[@name='com.baidu.mapapi.cloud']/class[@name='VersionInfo']/field[@name='VERSION_INFO']" name="managedName">VERSION_INFO_</attr>
      <attr path="/api/package[@name='com.baidu.mapapi.radar']/class[@name='VersionInfo']" name="managedName">VERSION_INFO_</attr>
      <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='A']/field[@name='a']" name="managedName">a_</attr>
      <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='f']/field[@name='f']" name="managedName">f_</attr>
    
    
    
      <attr path="/api/package[@name='com.baidu.platform.comapi.radar']/interface[@name='c']" name="obfuscated">false</attr>
      <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='J']" name="managedName">J_</attr>
      <attr path="/api/package[@name='com.baidu.platform.comapi.map']/interface[@name='j.a']" name="obfuscated">false</attr>
    
    
      <!--Search-->
      <attr path="/api/package[@name='com.baidu.mapapi.search.core']/class[@name='g']" name="obfuscated">false</attr>
    
      <!--util-->
      <attr path="/api/package[@name='com.baidu.mapapi.a.a']/class[@name='a']" name="obfuscated">false</attr>
      <attr path="/api/package[@name='com.baidu.mapapi.a.a']/class[@name='a']" name="managedName">a_</attr>
    
      <!--map-->
      <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='B']/field[@name='a']" name="managedName">a_</attr>
      <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='c']" name="obfuscated">false</attr>
      <attr path="/api/package[@name='com.baidu.platform.comapi.map']/interface[@name='i']" name="obfuscated">false</attr>
      <attr path="/api/package[@name='com.baidu.platform.comapi.map']/interface[@name='i']" name="managedName">i_</attr>
      <attr path="/api/package[@name='com.baidu.platform.comapi.map']/interface[@name='n']" name="obfuscated">false</attr>
      <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='g']" name="obfuscated">false</attr>
    
      <!--<attr path="/api/package[@name='com.baidu.location']/class[@name='Address']/field[@name='address']" name="managedName">address_</attr>
    <attr path="/api/package[@name='com.baidu.mapapi.map']/class[@name='d']/field[@name='d']" name="managedName">d_</attr>-->
    
      <attr path="/api/package[@name='com.baidu.mapapi.search.district']/interface[@name='OnGetDistricSearchResultListener']/method[@name='onGetDistrictResult']" name="argsType" >GetTDistrictResultEventArgs</attr>
    
      <attr path="/api/package[@name='com.baidu.mapapi.search.district']/class[@name='DistrictSearch']" name="managedName">DistrictSearch_</attr>
    
      <remove-node path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='C']" />
    
      <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='c']/method[@name='d' and count(parameter)=0]" name="managedName">d_</attr>
      <attr path="/api/package[@name='com.baidu.platform.comapi.map']/class[@name='c']/method[@name='c' and count(parameter)=0]" name="managedName">c_</attr>
    </metadata>
    View Code

    2.4、成功生成项目

    2.5、创建一个Xamarin.Andorid项目(目前还没有搞定Xamarin.Forms中的引用第三方SDK;如果您已经研究出来,跪求分享)

    2.6、引用之前添加的Java Library项目,这个地方如果引用不了,我们可以引用其生成成功的DLL即可

    2.7、我们添加两个文件并把下载的SDK中.SO文件放到目录下并且修改“生成操作”为 “AndroidNativeLibrary”

     

    2.8、关键的两步,很多人都卡在这个地方了,把百度地图的相关配置,配置到当前项目中

      配置开发KEY,配置到AssemblyInfo.cs文件中(请不要使用我的KEY)  

    重点 注:如何申请应用请点击这里,并正确填写包名和SHA1,不能确保100%,一定要看这个

    [assembly: MetaData("com.baidu.lbsapi.API_KEY", Value = "loEVXHdyqSdhGcYZlqkMES7x")]

    2.9、给当前APP相对应的权限

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="BaiduMapDemo.BaiduMapDemo" android:versionCode="1" android:versionName="1.0">
      <uses-sdk android:minSdkVersion="16" />
      <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" />
      <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    </manifest>

    3.0 在Main.axml文件件中输入

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

    3.1 在MainActivity.cs文件中输入

    博主在这个地方,第一次引用项目时

    Com.Baidu.Mapapi.Map 类下面是有BaiduMap控件,但是不知道为何第二次,Jar包什么都正常,整个工程也是能运行的,但是就是没有MapView这个控件,后来也不得不换成第一生成好的DLL了
    资源下载点击这里
    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 BaiduMapDemo
    {
        [Activity(Label = "BaiduMapDemo", MainLauncher = true, Icon = "@drawable/icon")]
        public class MainActivity : Activity
        {
            MapView mMapView;
            BaiduMap mBaiduMap;
            protected override void OnCreate(Bundle bundle)
            {
                base.OnCreate(bundle);
                SDKInitializer.Initialize(Application.Context);
                SetContentView(Resource.Layout.Main);
                mMapView = FindViewById<MapView>(Resource.Id.bmapView);
    
                mBaiduMap = mMapView.Map;
                //普通地图
                mBaiduMap.MapType = BaiduMap.MapTypeNormal;
            }
        }
    }

    3.2 运行成功(我在模拟器上面一直报错,初始化失败,解决半天没搞定,我就直接上真机上测试,)

    在真机上面我的运行环境我只保留了armeabi(还没去查这个之间的区别,但是网上是这么说的)

    (QQ群)Xamarin.Forms:521288080

    共同探讨摸索、共同进步

  • 相关阅读:
    学习canvas过程中的小菜鸟
    小菜鸟谈html语义化
    mui常用方法
    mui的侧滑菜单如何禁用手势侧滑
    ajax 传递数组参数
    LNMP状态管理命令
    LNMP相关软件目录及文件位置
    ubuntu常用命令
    Ubuntu设置允许root用户登录
    linux一键安装web环境(sh-1.3.0)
  • 原文地址:https://www.cnblogs.com/nimeide/p/5259203.html
Copyright © 2020-2023  润新知