【问题标题】:Xamarin.Essentials Never Prompts For PermissionsXamarin.Essentials 从不提示权限
【发布时间】:2020-01-18 20:42:46
【问题描述】:

我正在尝试在 Android 项目中将Xamarin.Forms.GoogleMaps 与定位服务一起使用。我的问题是应用程序从不提示我提供位置权限。我的 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 应该处理的权限。我肯定错过了什么。我必须手动请求权限吗?

【问题讨论】:

    标签: android xamarin xamarin.forms xamarin.android


    【解决方案1】:

    这不是由 Android 操作系统自动执行的。当您要使用需要权限的东西时,您需要手动请求权限。在您的情况下,位置权限。最简单的方法是使用权限插件Plugin.Permissions。

    您还需要处理用户的响应,因为如果您在他们拒绝后仍然尝试使用该权限,您的应用将会崩溃。

    【讨论】:

      【解决方案2】:

      你不会错过任何关于它是否有效的信息。

      只是您错过了一个插件无法知道您正在安装和使用另一个需要位置权限的插件。这些权限需要在运行时在应用程序的特定位置请求,并且必须由需要权限的插件处理(该插件将在此时激活,并且可以检查它是否被编程为这样做) 或自己。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-24
        • 2015-02-20
        • 2017-03-04
        • 2010-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多