簡體   English   中英

如何在 Xamarin Forms 中獲取設備的 GPS 位置?

[英]How can I get GPS Location of my device in Xamarin Forms?

當名為entLocation的輸入框獲得焦點時,我想獲取設備的經度和緯度。 我正在使用Xamarin.Essential Geolocation來獲取我設備的 GPS 位置,我按照文檔和教程進行操作,但仍然無法獲取 GPS 位置。 我在下面的 android manifest 中添加了權限仍然沒有。 我在“Error3”上收到顯示警報, Error3Unable 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM