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,我已经让地图工作了。。你在运行演示?你是否已经注册了你的debug.kestore并获得了googlemapneneneba API密钥作为开始?这是我试着让工作时的一些笔记
获取谷歌地图API密钥的步骤
=>(注意:Debug.keystore存储在Xamarin文件夹中,与那些java应用程序不同)
- 安装Google股份有限公司私人有限公司
- 获取签名密钥指纹
- 获取Map API密钥
- 在应用程序中使用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);
...
}
编辑:
刚刚评论了一些部分以使您的代码正常工作:
注:
我认为传感器和RotateView有问题,因为我无法让它以这种方式工作。如果你掌握了RotateView,只需将地图视图动态添加到linearLayout中,它就会起作用。现在,如果你还没有在你的应用程序中显示地图,下面是如何显示
我将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上运行我的应用程序。但是非常感谢您的帮助