[英]How can I get GPS Location of my device in Xamarin Forms?
當名為entLocation的輸入框獲得焦點時,我想獲取設備的經度和緯度。 我正在使用Xamarin.Essential Geolocation來獲取我設備的 GPS 位置,我按照文檔和教程進行操作,但仍然無法獲取 GPS 位置。 我在下面的 android manifest 中添加了權限仍然沒有。 我在“Error3”上收到顯示警報, Error3是Unable to get location時的異常。
錯誤是“ Java.Lang.NullPointerException: Attempt to invoke virtual method 'void android.app.Activity.requestPermissions(java.lang.String[],int)' on a null object reference ”
我的問題:
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)從Android 6.0 或以上版本開始,您需要有運行時權限。 為此,您需要覆蓋MainActivity.cs
OnStart()
方法。 我使用 Xamarin.Forms.Maps引用了 Android 6.0 以上的位置權限。 這是我所做的
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 會顯示異常。 從“允許訪問位置?”中選擇“允許”后設備上有提示,再次運行項目不會出現異常。 我還沒有處理這個問題。
正如我所說,問題並沒有完全解決。 我的回答是幫助您暫時解決位置權限問題並繼續前進。 而且我不知道如何離線獲取位置信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.