Плагин Xamarin Geolocator не работает на Xamarin Forms android

Я установил следующий 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" />
  • <uses-permission android: name = "android.permission.ACCESS_COARSE_LOCATION" />
  • <использует-разрешение android: name = "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
  • <uses-permission android: name = "android.permission.ACCESS_MOCK_LOCATION" />
  • <uses-permission android: name = "android.permission.ACCESS_NETWORK_STATE" />
  • <использует-разрешение android: name = "android.permission.ACCESS_WIFI_STATE" />
  • <использует-разрешение android: name = "android.permission.INTERNET" />

Пробую использовать метаданные 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 для Android)

Версия моих Xamarin Forms - 3.1.0.697729.

Я создал еще один пустой проект, и местоположение на Android все еще не работает.

В iOS у меня нет проблем. Место рабочее.

Я читал это, https://jamesmontemagno.github.io/GeolocatorPlugin/GettingStarted.html.

Когда я запускаю приложение, и следующая строка кода пытается выполнить метод, оно больше не выполняет следующие строки метода. Приложение работает, но не пропускает никаких исключений.

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

Эта строка ничего не возвращает.

Есть идеи, почему это не удается?

Как вы звоните LoadMap?

Cheesebaron 24.08.2018 21:03

@Cheesebaron В моем коде за общедоступным MapLocal () {InitializeComponent (); customMap.CustomPins = новый список <CustomPin> (); MoveMapToCurrentPosition (); }

Jorge MHT 24.08.2018 22:08

поместите эту строку кода Plugin.CurrentActivity.CrossCurrentActivity.Current.Init(thi‌​s, bundle); в свой MainActivity.cs`. любые изменения?

Fuong 24.08.2018 22:08

Не могли бы вы подробнее рассказать о вызове LoadMap. Если GetPositionAsync не возвращает, у вас тупик

Cheesebaron 24.08.2018 22:10

@Fuong Ничего, тот же результат, если у меня есть CrossCurrentActivity.Current.Init (this, bundle); или нет

Jorge MHT 24.08.2018 22:10

Я начал использовать Xamarin.Essentials, потому что многие из этих плагинов Xamarin движутся к нему github.com/xamarin/Essentials. Взгляните на документацию по геолокации и рассмотрите возможность ее использования, потому что, вероятно, она лучше поддерживает docs.microsoft.com/en-gb/xamarin/essentials/geolocation

J. Aguilar 24.08.2018 22:11

@Cheesebaron Как я могу это увидеть? (тупик)

Jorge MHT 24.08.2018 22:11

@JorgeMHT, если вы читаете раздел Разрешения и дополнительные соображения по настройке в [GeolocatoPlugin] (jamesmontemagno.github.io/GeolocatorPlugin/GettingStarted.ht‌ ml), у вас должна быть хотя бы эта строка кода в вашем MainActivity.cs для Android.

Fuong 24.08.2018 22:13

@Fuong У меня есть этот метод OnRequestPermissionsResult в моем MainActivity

Jorge MHT 24.08.2018 22:17

@ J.Aguilar На данный момент я могу добавить эти плагины в свой проект

Jorge MHT 24.08.2018 22:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
10
457
0

Другие вопросы по теме