首页 > 解决方案 > Xamarin 插件地理定位器不适用于 Xamarin Forms android

问题描述

我已经安装了以下 nuget:

我有以下课程:

    public class MainApplication : Application
    {
         public MainApplication(IntPtr handle, JniHandleOwnershiptranser): base(handle, transer)
         {
         }

         public override void OnCreate()
         {
               base.OnCreate();
               CrossCurrentActivity.Current.Init(this);
         }
    }

我的 MainActivity 类中有代码:

    protected override void OnCreate(Bundle bundle)
    {
        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;

        base.OnCreate(bundle);

        Forms.Init(this, bundle);
        FormsMaps.Init(this, bundle);

        LoadApplication(new App());
    }

    public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
    {
        PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    }

安卓清单

<application android:label="MyApp.Android" android:icon="@drawable/icon">
    <meta-data android:name="com.google.android.maps.v2.API_KEY " android:value="AIza..." />
    <provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true">
        <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"></meta-data>
    </provider>
</application>

Android清单 - 权限

我尝试使用元数据 android:name="com.google.android.geo.API_KEY" 而不是元数据 android:name="com.google.android.maps.v2.API_KEY"

在下面添加这一行 < meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

我有一个视图,其中有我的地图:

<ContentPage.Content>
    <maps:Map x:Name="Map" />
</ContentPage.Content>

以及背后的代码:

    private async Task LoadMap()
    {
        if (await Utils.Utils.CheckPermissions(Permission.Location))
        {
            var currentLocation = await CrossGeolocator.Current.GetPositionAsync(TimeSpan.FromSeconds(10));

            // MORE CODE
        }

    }

我使用这个类https://github.com/jamesmontemagno/PermissionsPlugin/blob/master/samples/PermissionsSample/PermissionsSample/Utils.cs请求许可

我从这里获取 api 密钥https://developers.google.com/maps/documentation/android-sdk/signup?hl=en (Maps SDK for Android)

我的 Xamarin Forms 版本是 3.1.0.697729

我创建了另一个空项目,android 上的位置仍然无法正常工作。

在 iOS 中我没有问题。该位置正在工作。

我读了这篇文章,https://jamesmontemagno.github.io/GeolocatorPlugin/GettingStarted.html

当我运行该应用程序并且下一行代码尝试执行该方法时,它不再执行该方法的以下行。该应用程序可以工作,但不要跳过任何异常。

   await CrossGeolocator.Current.GetPositionAsync(TimeSpan.FromSeconds(10));

此行不返回任何内容。

知道为什么会失败吗?

标签: c#androidxamarinxamarin.formsgeolocation

解决方案


推荐阅读