Xamarin插件Geolocator无法在Xamarin Forms android

时间:2018-08-24 18:46:59

标签: c# android xamarin xamarin.forms geolocation

我已经安装了以下nuget:

  • Xamarin.Forms.Maps版本=> 3.1.0.697729
  • Plugin.CurrentActivity => 2.1.0.4
  • Xam.Plugin.Geolocator => 4.5.0.6
  • Plugin.Permissions => 3.0.0.12

我有以下课程:

    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);
    }

Android清单

<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 =“ android.permission.ACCESS_FINE_LOCATION” />
  • <使用权限android:name =“ android.permission.ACCESS_COARSE_LOCATION” />
  • <使用权限android:name =“ android.permission.ACCESS_LOCATION_EXTRA_COMMANDS” />
  • <使用权限android:name =“ android.permission.ACCESS_WIFI_STATE” />

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

也在此行下方添加

我有一个查看地图的视图:

<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来请求权限

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

我的Xamarin表单的版本是3.1.0.697729

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

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

我读了https://jamesmontemagno.github.io/GeolocatorPlugin/GettingStarted.html

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

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

此行不返回任何内容。

知道为什么会失败吗?

0 个答案:

没有答案