C# Xamarin地图在Android Emulator中崩溃

C# Xamarin地图在Android Emulator中崩溃,c#,android,xaml,dictionary,xamarin,C#,Android,Xaml,Dictionary,Xamarin,我对Xamarin.Forms.Maps有点问题,异常没有以有意义的方式传播到调试器中,以帮助我诊断问题 每次重新安装Visual Studio时,我都可以让它正常工作。它会工作几次,然后最终会100%崩溃,只要映射项在xaml中。我不是在运行之间重新设计项目,只是重新安装VisualStudio。我正在运行VisualStudio17社区 错误只是说: '您的应用程序已进入中断状态,但没有代码显示,因为所有线程都在执行外部代码(通常是系统或框架代码)。' 我有一个有效的API密钥,即使我注释掉

我对Xamarin.Forms.Maps有点问题,异常没有以有意义的方式传播到调试器中,以帮助我诊断问题

每次重新安装Visual Studio时,我都可以让它正常工作。它会工作几次,然后最终会100%崩溃,只要映射项在xaml中。我不是在运行之间重新设计项目,只是重新安装VisualStudio。我正在运行VisualStudio17社区

错误只是说:

'您的应用程序已进入中断状态,但没有代码显示,因为所有线程都在执行外部代码(通常是系统或框架代码)。'

我有一个有效的API密钥,即使我注释掉了与映射相关的所有代码,它最终也会发生,而不是创建它的Xaml。如果我重新安装VisualStudio,我可以在调用调试器的前几次操作映射,直到它失败

我希望我能提供更多信息,但我对Xamarin的开发非常陌生,所以我有点不确定为什么重新安装Visual Studio会暂时解决这个问题。如果有任何见解,我将不胜感激,因为我花了很多时间尝试诊断和重新安装,但不知道会出现什么问题,因为错误并不能说明什么。我想提供更多的信息,如果有人有更多的想法给我检查

通常,它最终也无法部署,这就是我最初尝试安装的原因。我不确定这是否相关

MainPage.xaml.cs

using System;
using System.Linq;
using System.Text;
using Xamarin.Forms;
using Plugin.Geolocator;
using System.Threading.Tasks;
using System.Collections.Generic;
using Plugin.Geolocator.Abstractions;

namespace LawnDroneCompanion
{
    public partial class MainPage : ContentPage
    {
        private List<Position> RecordedPositions = new List<Position>();

        public MainPage()
        {
            InitializeComponent();
        }

        private void StopGeoLocatorListening()
        {
            BeginTrackingRoute.Text = "Begin Tracking";
            BeginTrackingRoute.BackgroundColor = Color.Green;
            CrossGeolocator.Current.StopListeningAsync();
        }

        private async void StartGeoLocatorListening(object obj, EventArgs e)
        {
            if (CrossGeolocator.Current.IsListening)
            {
                StopGeoLocatorListening();
                return;
            }

            BeginTrackingRoute.Text = "Stop Tracking";
            BeginTrackingRoute.BackgroundColor = Color.Red;

            CrossGeolocator.Current.DesiredAccuracy = 10;

            ///This logic will run on the background automatically on iOS, however for Android and UWP you must put logic in background services. Else if your app is killed the location updates will be killed.
            await CrossGeolocator.Current.StartListeningAsync(TimeSpan.FromSeconds(1), 1, true, new Plugin.Geolocator.Abstractions.ListenerSettings
            {   
                ActivityType = Plugin.Geolocator.Abstractions.ActivityType.Other,
                AllowBackgroundUpdates = true,
                DeferLocationUpdates = true,
                DeferralDistanceMeters = 1,
                DeferralTime = TimeSpan.FromSeconds(1),
                ListenForSignificantChanges = true,
                PauseLocationUpdatesAutomatically = false
            });


            Position StartLocation = await CrossGeolocator.Current.GetLastKnownLocationAsync();
            //MyMap.MoveToRegion(Xamarin.Forms.Maps.MapSpan.FromCenterAndRadius(new Xamarin.Forms.Maps.Position(StartLocation.Latitude, StartLocation.Longitude), Xamarin.Forms.Maps.Distance.FromMiles(0.2))); 

            CrossGeolocator.Current.PositionChanged += GeoLocateHandler;
        }

        private void DrawNewLocation(Plugin.Geolocator.Abstractions.Position position)
        {
            if(RecordedPositions.Count > 1000)
            {
                return;
            }

           RecordedPositions.Add(position);
           //MyMap.MoveToRegion(Xamarin.Forms.Maps.MapSpan.FromCenterAndRadius(new Xamarin.Forms.Maps.Position(position.Latitude, position.Longitude), MyMap.VisibleRegion.Radius));
        }

        private void GeoLocateHandler(object sender, PositionEventArgs e)
        {
            Device.BeginInvokeOnMainThread(() =>
            {
                DrawNewLocation(e.Position);
            });
        }
    }
}
使用系统;
使用System.Linq;
使用系统文本;
使用Xamarin.Forms;
使用Plugin.geologitor;
使用System.Threading.Tasks;
使用System.Collections.Generic;
使用Plugin.geologitor.Abstractions;
名称空间LawnDroneCompanion
{
公共部分类主页:ContentPage
{
私有列表RecordedPositions=新列表();
公共主页()
{
初始化组件();
}
私有void StopGeoLocatorListening()
{
begingRoute.Text=“开始跟踪”;
BegingRoute.BackgroundColor=Color.Green;
CrossGeolocator.Current.StopListingAsync();
}
私有异步void StartGeoLocatorListening(对象对象obj、事件参数e)
{
if(CrossGeolocator.Current.IsListening)
{
stopGeoLocator();
返回;
}
begingRoute.Text=“停止跟踪”;
BegingRoute.BackgroundColor=Color.Red;
CrossGeolocator.Current.DesiredAccuracy=10;
///此逻辑将在iOS上自动在后台运行,但是对于Android和UWP,您必须将逻辑放入后台服务。否则,如果您的应用程序被终止,位置更新将被终止。
等待CrossGeolocator.Current.StartListeningAsync(TimeSpan.FromSeconds(1),1,true,new Plugin.Geolocator.Abstractions.ListenerSettings
{   
ActivityType=Plugin.geologitor.Abstractions.ActivityType.Other,
AllowBackgroundUpdates=true,
DeferLocationUpdates=true,
延迟距离计=1,
延迟时间=从秒开始的时间跨度(1),
ListenForSignificantChanges=true,
PauseLocationUpdatesAutomatically=false
});
Position StartLocation=等待CrossGeolocator.Current.GetLastKnownLocationAsync();
//MyMap.MoveToRegion(Xamarin.Forms.Maps.MapSpan.FromCenterAndRadius(新的Xamarin.Forms.Maps.Position(StartLocation.Latitude,StartLocation.Longitude),Xamarin.Forms.Maps.Distance.FromMiles(0.2));
CrossGeolocator.Current.PositionChanged+=GeoLocateHandler;
}
私有void DrawNewLocation(Plugin.geologitor.Abstractions.Position)
{
如果(RecordedPositions.Count>1000)
{
返回;
}
记录位置。添加(位置);
//MyMap.MoveToRegion(Xamarin.Forms.Maps.MapSpan.FromCenterAndRadius(新的Xamarin.Forms.Maps.Position(位置.纬度,位置.经度),MyMap.VisibleRegion.Radius));
}
私有void geolocateholder(对象发送方,PositionEventArgs e)
{
Device.beginInvokeMainThread(()=>
{
图纸新位置(e位置);
});
}
}
}
MainPage.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:LawnDroneCompanion"
             xmlns:maps="clr-namespace:Xamarin.Forms.Maps;assembly=Xamarin.Forms.Maps"    
             x:Class="LawnDroneCompanion.MainPage">
    <ContentPage.Content>
        <StackLayout>
            <StackLayout VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
                <!-- If I comment this out it works, this comment isn't in my real code -->
                <maps:Map x:Name="MyMap" IsShowingUser="True" MapType="Hybrid"/>
            </StackLayout>
            <Button x:Name="BeginTrackingRoute" HorizontalOptions="FillAndExpand" Text="Begin Tracking" Clicked="StartGeoLocatorListening" BackgroundColor="Green" TextColor="WhiteSmoke" BorderRadius="0"/>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

AndroidManifest.xml

<?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="com.companyname.LawnDroneCompanion" android:installLocation="auto">
    <uses-sdk android:minSdkVersion="25" />
    <!-- Google Maps for Android v2 requires OpenGL ES v2 -->
    <uses-feature android:glEsVersion="0x00020000" android:required="true" />
  <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- Allow the application to access Google web-based services. -->
    <!-- Google Maps for Android v2 will cache map tiles on external storage -->
    <application android:label="LawnDroneCompanion.Android">
        <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="{IMAGINE-MY-KEY-HERE}" />
    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
  </application>
</manifest>

我已经尝试了你的代码,但我无法崩溃。请参阅此以获取更多信息