我想在输入框名为时获取我的设备的经度和纬度实体位置 is focused。我在用Xamarin.Essential 地理定位为了获取我的设备的 GPS 位置,我按照文档和教程进行操作,但仍然无法获取 GPS 位置。我已经在我的 Android 清单中添加了以下权限,但仍然没有任何权限。我收到一条显示警报"Error3", Error3是例外情况无法获取位置.
错误是“Java.Lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.app.Activity.requestPermissions(java.lang.String[],int)”"
我的问题:
1. 我的代码有什么错误?
2. 我可以离线获取我的 GPS 位置吗?如果是,我怎样才能实现这一目标?
使用权限 android:name="android.permission.ACCESS_COARSE_LOCATION"
使用权限 android:name="android.permission.ACCESS_FINE_LOCATION"
使用功能 android:name="android.hardware.location" android:required="false"
使用功能 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");
}
}
我还在开发我的第一个需要位置权限的 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) Since 安卓6.0以上,你需要有运行时权限。为了实现这一点,你需要覆盖OnStart()
方法在你的MainActivity.cs
。我参考了Android 6.0 以上版本使用 Xamarin.Forms.Maps 的位置权限 https://stackoverflow.com/questions/48487333/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 会显示异常。当你选择之后"allow" from “允许访问位置吗?”设备上有提示,再次运行项目就不会出现异常。我还没有处理过这个问题。
我的极限
正如我所说,问题还没有完全解决。我的答案是帮助您暂时解决位置权限问题并继续前进。而且我不知道如何离线获取位置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)