如何让它在Google的API 10(2.3.3)上运行xamarin的地图演示?我试图使用Monodroid提供的google maps api运行地图演示应用程序并且它不起作用,它总是出现Java .IO.Exception:27,Java.IO.Exception:28,依此类推。我试图从12月开始使用它,我没有看到任何解决方案。我正在使用Monodevelop IDE在Mac上工作。有没有人有办法解决吗?
编辑:
<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"
/>
以下是我对Manifest的许可:
<?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 Key不是真正的。
答案 0 :(得分:3)
我正在使用monodroid,我的地图正在运行..你正在运行演示?你有你的debug.kestore注册并获得谷歌地图API密钥开始?这是我试图让它工作时的一些笔记
Steps to obtain google map API key
=&GT; (注意:Debug.keystore存储在您的Xamarin文件夹中,与那些Java应用程序不同)
之后,要显示地图,请使用
<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]");
这意味着您需要替换Demo中的一些代码
如果您正在使用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并且只是动态地将mapview添加到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; }
}
}
答案 1 :(得分:2)
我意识到我的问题是我的apiKey,我从另一个目录得到我的指纹:〜/ .android / debug.keystore我并不认为这是问题,因为我生成它以获得我的apikey和我在我的Java android应用程序中使用它并且工作正常,但后来我尝试将其更改为位于此目录中的debug.store:$ HOME / .local / share / Xamarin / Mono for Android / debug.keystore,并抛出我另一个指纹,所以我用它来生成另一个apikey,然后神奇地在Mono上运行我的应用程序。但非常感谢你的帮助