Monodroid上的谷歌地图,Mac上的错误编译

本文关键字:错误 编译 Mac 谷歌地图 Monodroid | 更新日期: 2023-09-27 18:21:49

如何在谷歌API 10(2.3.3)上使用xamarin的地图演示?,我试图用Monodroid提供的谷歌地图api运行地图演示应用程序,但它不起作用,它总是出现Java.IO.Exception:27,Java.IO.Exception:28,等等。我从去年12月开始尝试使用它,但我看不到任何解决方案。我在Mac上使用Monosdevelop IDE。有人有解决方案吗?

编辑:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main"
android:layout_width="match_parent" 
android:layout_height="match_parent">
<com.google.android.maps.MapView
    android:layout_width="match_parent" 
    android:layout_height="match_parent"
    android:enabled="true"
    android:clickable="true"
    android:apiKey="0oqo66omATbRfB2Wpsdf6Kpi9-fm88CsqwHauLg"
    />

这是我对舱单的许可:

<?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="cdcsoftwareerpmobileandroid.cdcsoftwareerpmobileandroid">
<application android:label="CdcSoftware.ErpMobile.AndroidUI" android:debuggable="true">
</application>
<uses-permission android:name="android.permission.CALL_PHONE">
</uses-permission>
<uses-permission android:name="android.permission.INTERNET">
</uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION">
</uses-permission>
<uses-sdk /></manifest>

这是MapActivity类,我评论了一行来测试这两个选项:

public class MapAddress : MapActivity
{
    const String TAG = "MapViewCompassDemo";
    private SensorManager sensor_manager;
    private RotateView rotate_view;
    private MyLocationOverlay location_overlay;
    protected override void OnCreate (Bundle savedInstanceState)
    {
        base.OnCreate (savedInstanceState);
        //SetContentView (Resource.Layout.mapview);

        // Get a reference to the sensor manager
        sensor_manager = (SensorManager) GetSystemService (Context.SensorService);
        // Create our view
        var map_view = new MapView (this, "0oqo66dsfTbRfB2Wp0Lr6Kpi9-fm88CsqwHauLg");
        rotate_view = new RotateView (this);
        rotate_view.AddView (map_view);
        SetContentView (rotate_view);
        // Create the location overlay
        location_overlay = new MyLocationOverlay (this, map_view);
        location_overlay.RunOnFirstFix (delegate {
            map_view.Controller.AnimateTo (location_overlay.MyLocation);
        });
        map_view.Overlays.Add (location_overlay);
        map_view.Controller.SetZoom(18);
        map_view.Clickable = true;
        map_view.Enabled = true;
    }
    protected override bool IsRouteDisplayed {
        get { return false; }
    }
}

注意:Api密钥不是真的。

Monodroid上的谷歌地图,Mac上的错误编译

我正在使用monodroid,我已经让地图工作了。。你在运行演示?你是否已经注册了你的debug.kestore并获得了googlemapneneneba API密钥作为开始?这是我试着让工作时的一些笔记

获取谷歌地图API密钥的步骤

=>(注意:Debug.keystore存储在Xamarin文件夹中,与那些java应用程序不同)

  1. 安装Google股份有限公司私人有限公司
  2. 获取签名密钥指纹
  3. 获取Map API密钥
  4. 在应用程序中使用Map API密钥

之后,要显示地图,请使用

<com.google.android.maps.MapView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:enabled="true"
    android:clickable="true"
    android:apiKey="[MY API KEY]" />

或者通过程序:

var map_view = new MapView (this, "[MY API KEY]");

这意味着你需要在演示中替换一些代码

如果你使用的是Mono的MapDemo,不知何故,只有带指南针的应用程序对我有效。但只要制作一个像他们这样的简单地图应用程序,两种方法(将API键放在布局文件或代码中)都会起作用。

编辑:

对于权限,请将这些放在应用程序标签之外:

  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-permission android:name="android.permission.INTERNET" />
  <application></application>

不确定是否有必要,但在AssemblyInfo.cs 中

[assembly: UsesPermission(Android.Manifest.Permission.Internet)]

对我来说,我只是加载一个布局如下的地图:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
  <Button
      android:id="@+id/Logout"
      android:layout_alignParentTop="true"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="@string/Logout"
    />
  <com.google.android.maps.MapView
      android:id="@+id/mapview"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:layout_below ="@+id/Logout"
      android:layout_alignParentLeft="true"
      android:enabled="true"
      android:clickable="true"
      android:apiKey="API KEY"
        />
  <LinearLayout android:id="@+id/zoom"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_alignParentBottom="true"
  android:layout_centerHorizontal="true"
  />
</RelativeLayout>

并像这样加载:

protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle); ;
    SetContentView(Resource.Layout.mapview);
...
}

编辑:

刚刚评论了一些部分以使您的代码正常工作:

注:

  1. 我认为传感器和RotateView有问题,因为我无法让它以这种方式工作。如果你掌握了RotateView,只需将地图视图动态添加到linearLayout中,它就会起作用。现在,如果你还没有在你的应用程序中显示地图,下面是如何显示

  2. 我将SetContentView(Resource.Layout.Main)更改为我放置MapView布局的位置。。只要把它改回你的就行了。

    public class MapAddress : MapActivity
    {
        const String TAG = "MapViewCompassDemo";
        //private SensorManager sensor_manager;
        //private RotateView rotate_view;
        //private MyLocationOverlay location_overlay;   
        protected override void OnCreate (Bundle savedInstanceState)
        {
            base.OnCreate (savedInstanceState);
            SetContentView (Resource.Layout.Main);
    
            // Get a reference to the sensor manager
        //    sensor_manager = (SensorManager) GetSystemService (Context.SensorService);
            // Create our view
      /*      var map_view = new MapView (this, "0oeB7V1XvegNHY25V5kJq0dsGz_HPbzZa-0WCkg");
            rotate_view = new RotateView (this);
            rotate_view.AddView (map_view);
            SetContentView (rotate_view);
            // Create the location overlay
            location_overlay = new MyLocationOverlay (this, map_view);
            location_overlay.RunOnFirstFix (delegate {
                map_view.Controller.AnimateTo (location_overlay.MyLocation);
            });
            map_view.Overlays.Add (location_overlay);
            map_view.Controller.SetZoom(18);
            map_view.Clickable = true;
            map_view.Enabled = true;
            */
        }
        protected override bool IsRouteDisplayed {
            get { return false; }
        }
    }
    

我意识到我的问题是我的apiKey,我从另一个目录获得了我的指纹:~/.android/debug.keystore,我不认为这是问题所在,因为我用它生成是为了获得我的apiKey,我在我的Java android应用程序中使用它,并且运行良好,但随后我尝试将其更改为位于以下目录中的debug.store:$HOME/.local/share/Xamarin/Mono-for-Android/debug.keystore,并向我抛出另一个指纹,所以我用它生成另一个apikey,然后神奇地在Mono上运行我的应用程序。但是非常感谢您的帮助