Xamarin:发生地理位置错误:未经授权

abo*_*san 3 xamarin.android xamarin xamarin.forms

我正在尝试获取当前位置,并且正在UWP和iOS上运行,但是在Andriod上运行时,它显示了Unhandled Exception。

Plugin.Geolocator.Abstractions.GeolocationException:发生地理位置错误:未经授权

而且我已经向我的android清单添加了权限,就像这样:

AndroidManifest.xml

<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_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />

<application android:label="Location1.Android">
<meta-data android:name="com.google.android.maps.v2.API_KEY"
       android:value="**googleAPI_KEY**" />
 <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
Run Code Online (Sandbox Code Playgroud)

AssemblyInfo.cs

<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_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />

<application android:label="Location1.Android">
<meta-data android:name="com.google.android.maps.v2.API_KEY"
       android:value="**googleAPI_KEY**" />
 <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
Run Code Online (Sandbox Code Playgroud)

XAML

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using Android.App;

[assembly: AssemblyTitle("Location1.Android")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Location1.Android")]
[assembly: AssemblyCopyright("Copyright ©  2014")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]

[assembly: UsesFeature("android.hardware.location", Required = false)]
[assembly: UsesFeature("android.hardware.location.gps", Required = false)]
[assembly: UsesFeature("android.hardware.location.network", Required = 
 false)]


[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]


[assembly: UsesPermission(Android.Manifest.Permission.Internet)]
 [assembly:UsesPermission(Android.Manifest.Permission.WriteExternalStorage)]
Run Code Online (Sandbox Code Playgroud)

XAML代码

enter code here<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:local="clr-namespace:Location1"
    xmlns:maps="clr- 
      namespace:Xamarin.Forms.Maps;assembly=Xamarin.Forms.Maps"
         x:Class="Location1.MainPage">
<StackLayout Orientation="Vertical">
    <Button Text="Get GPS Position" Clicked="Button_Clicked" />
    <Label Text="latitude" TextColor="Gray" FontSize="30" />
    <Label x:Name="LatitudeLabel" TextColor="Gray" FontSize="50"></Label>
    <Label Text="Logitude" TextColor="Gray" FontSize="30" />
    <Label x:Name="LongitudeLabel" TextColor="Yellow" FontSize="50"></Label>
</StackLayout>
Run Code Online (Sandbox Code Playgroud)

Ger*_*uis 6

你是否也看到并做到了这一点?

此插件利用Permission Plugin,这意味着您必须将以下代码添加到您的BaseActivityMainActivityXamarin.Forms 中:

添加活动:

public override void OnRequestPermissionsResult(int requestCode,
    string[] permissions, Android.Content.PM.Permission[] grantResults) 
{
    Plugin.Permissions.PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode,
        permissions, grantResults);
    base.OnRequestPermissionsResult(requestCode, permissions,
        grantResults); 
}
Run Code Online (Sandbox Code Playgroud)

这里的文档。


Sip*_*nya 6

您可能在主要活动的OnCreate方法中缺少以下代码。

Plugin.CurrentActivity.CrossCurrentActivity.Current.Init(this,bundle);