当 entLocation 输入框被聚焦时,我想获取设备的经度和纬度。我正在使用 Xamarin.Essential Geolocation 来获取设备的GPS位置,但仍遵循文档和教程,但仍然无法获取GPS位置。我在我的android清单中添加了以下权限,仍然没有。我收到有关“ Error3” 的显示警报,当无法获取位置时, Error3 是一个例外。
错误为“ Java.Lang.NullPointerException:尝试在空对象引用上调用虚拟方法'void android.app.Activity.requestPermissions(java.lang.String [],int)'“
我的问题:
1.我的代码有什么错误?
2.我可以使我的GPS位置离线吗?如果可以,我该如何实现?
uses-permission android:name =“ android.permission.ACCESS_COARSE_LOCATION”
使用权限android:name =“ android.permission.ACCESS_FINE_LOCATION”
Uses-feature android:name =“ android.hardware.location” android:required =“ false”
Uses-feature android:name =“ android.hardware.location.gps” android:required =“ false”
使用功能android:name =“ android.hardware.location.network” android:required =“ false”
private async void entLocation_FocusedAsync(object sender, FocusEventArgs e)
{
try
{
var request = new GeolocationRequest(GeolocationAccuracy.Medium);
var location = await Geolocation.GetLocationAsync(request);
if (location != null)
{
entLocation.Text = location.Longitude.ToString() + "," + location.Latitude.ToString();
}
}
catch (FeatureNotSupportedException fnsEx)
{
await DisplayAlert("Error1", fnsEx.ToString(), "ok");
}
catch (PermissionException pEx)
{
await DisplayAlert("Error2", pEx.ToString(), "ok");
}
catch (Exception ex)
{
await DisplayAlert("Error3", ex.ToString(), "ok");
}
}
答案 0 :(得分:1)
我还在从事我的第一个需要位置权限的Xamarin项目。您应该尝试做的一些事情可能会帮助您获取GPS位置。
1)您需要在AndroidManifest
文件中授予其他权限。这些是
<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_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
2)由于 Android 6.0或更高版本,您需要具有运行时权限。为此,您需要在OnStart()
中覆盖MainActivity.cs
方法。我引用了Location permission for Android above 6.0 with Xamarin.Forms.Maps。这是我所做的
protected override void OnStart()
{
base.OnStart();
if(CheckSelfPermission(Manifest.Permission.AccessCoarseLocation) != (int)Permission.Granted)
{
RequestPermissions(new string[] { Manifest.Permission.AccessCoarseLocation, Manifest.Permission.AccessFineLocation }, 0);
}
}
重要:这里的解决方案是暂时处理授予权限。首次生成和运行项目时,Visual Studio将显示异常。从设备上的“允许访问位置?” 提示中选择“允许” 后,再次运行该项目时不会出现异常。我尚未处理此问题。
正如我所说,这个问题尚未完全解决。我的答案是帮助您暂时解决位置权限问题并继续前进。而且我不知道如何离线获取位置信息。