我是Xamarin Android的新手。我想在我的应用程序上显示一个基本的谷歌地图。我为谷歌地图api设置了API密钥等。但是,当我运行模拟器时会显示一条消息“如果没有Google Play服务,应用程序将无法运行”。
我已经使用android sdk manager安装了所有的软件包/ SDK,我正在尝试使用API级别22(Android 5.0 Lollipop)。
下面的代码用于初始化谷歌地图(从xamarin示例下载)。
任何人都可以告诉我这里缺少什么。
using System;
using Android.App;
using Android.Content;
using Android.Gms.Maps;
using Android.Gms.Maps.Model;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
namespace App2
{
[Activity(Label = "App2", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity, IOnMapReadyCallback
{
private GoogleMap _gMap;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
GetMap();
}
private void GetMap()
{
if (_gMap == null)
{
FragmentManager.FindFragmentById<MapFragment>(Resource.Id.map).GetMapAsync(this);
}
}
public void OnMapReady(GoogleMap map)
{
_gMap = map;
}
}
}
Main.axml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.MapFragment" />
Android Mainfest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="App2.App2" android:versionCode="1" android:versionName="1.0" android:installLocation="auto">
<uses-sdk android:minSdkVersion="16" />
<application android:label="App2" android:icon="@drawable/Icon">
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyCKBrF-_IrAQlkUyFG7GT4qgEJ7qOgyNRI" />
</application>
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
<!-- We need to be able to download map tiles and access Google Play Services-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- Allow the application to access Google web-based services. -->
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<!-- Google Maps for Android v2 will cache map tiles on external storage -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- Google Maps for Android v2 needs this permission so that it may check the connection state as it must download data -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- These are optional, but recommended. They will allow Maps to use the My Location provider. -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
答案 0 :(得分:3)
这似乎是,设备或本例中的模拟器没有安装Google Play服务。 Android应用中的软件包只提供对Google Play服务的访问权限,该服务通常安装在设备上。从这个意义上说,Google Play服务更像是一个共享运行时。
要解决此问题,您应该可以按照此guide在模拟器上安装Google Play服务。
我希望这有帮助!
答案 1 :(得分:2)
您似乎正在尝试在未安装Google Play服务的模拟器图像上运行该应用。
首先,我总是建议使用物理设备进行测试,但如果您需要测试不拥有设备的各种API级别,那么使用模拟器就足够了。
如果您使用的是Google AVD,那么您可以create a new virtual device已经包含Google Play服务。
如果你正在使用Xamarin Android Player,那么你可以使用@clb提到的this guide。但请注意,Xamarin Android Player是预览版软件,并未得到官方支持。如果这是模拟器,那么您在安装Google Play服务时遇到问题,那么您支持的最佳选择就是file a bug report。 (该指南当前显示日志的错误位置,现在通过(Windows)右键单击底栏(Mac)单击“帮助”菜单&gt;生成错误报告 - 日志将在您的桌面上压缩而获得
如果您仍然遇到问题,请告诉我您正在使用的模拟器,我会看看我是否可以提供更多帮助!
答案 2 :(得分:1)
正如其他人所说,问题似乎是您没有在模拟器上安装Google Play服务(也就是Google API)。这是我写的教程的链接,向您展示如何做到这一点。还有一个视频:https://birdsbits.wordpress.com/2016/05/26/testing-location-aware-apps-on-an-emulator