Xamarin.Essentials никогда не запрашивает разрешения - PullRequest
1 голос
/ 18 января 2020

Я пытаюсь использовать Xamarin.Forms.GoogleMaps со службами определения местоположения в проекте Android. Моя проблема в том, что приложение никогда не запрашивает разрешения на местоположение. Моя MainActivity.cs страница выглядит следующим образом

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

        base.OnCreate(savedInstanceState);

        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        Xamarin.FormsGoogleMaps.Init(this, savedInstanceState);
        global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
        LoadApplication(new App());
    }
    public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
    {
        Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

        base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    }

У меня есть разрешения, указанные в моем файле манифеста

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

Но когда я пытаюсь использовать Xamarin.Forms.GoogleMaps и установите MyLocationEnabled="True"

<StackLayout Grid.Row="2">
    <maps:Map VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" MyLocationEnabled="True"> 
    </maps:Map>
</StackLayout>

Я получаю следующую ошибку

Java .Lang.SecurityException: «мое местоположение требует разрешения ACCESS_FINE_LOCATION или ACCESS_COARSE_LOCATION '

Приложение никогда не запрашивает у меня разрешения, которые, как я думал, должен обрабатывать OnRequestPermissionsResult. Я должен что-то упустить. Нужно ли вручную запрашивать разрешения?

Ответы [ 2 ]

3 голосов
/ 18 января 2020

Это не то, что автоматически выполняется ОС Android. Вам нужно вручную запросить разрешение, когда вы собираетесь использовать то, что требует разрешения. В вашем случае местоположение разрешений. Самый простой способ сделать это - использовать плагин полномочий Plugin.Permissions .

Вам также нужно будет обработать ответ пользователя, потому что если вы попытаетесь использовать разрешение в любом случае после они отрицали, что ваше приложение взломает sh.

1 голос
/ 18 января 2020

Вы ничего не упускаете из-за того, работает ли он или нет.

Просто вам не хватает того, что один плагин не может знать, что вы устанавливаете и используете другой плагин, для которого потребуется разрешение для определения местоположения. Эти разрешения необходимо запрашивать во время выполнения в определенных c местах приложения и обрабатывать либо плагином, который требует разрешения (который будет активирован в этот момент и может выполнить проверку, если он был запрограммирован). сделать это) или самостоятельно.

...