如何获取Xamarin Android项目的卫星数量

问题描述 投票:0回答:2

我正在开发 Xamarin Android 项目,我需要获取有多少颗卫星的信息(不是准确性和其他解决方法)。 我在下面找到了一个解决方案,但是,GpsStatus.IListener 已过时。 Android Xamarin C#:获取用于 GPS 定位的卫星数量 我还尝试了 FusedLocationProviderClient,但我看不到返回的卫星信息。 有谁知道如何解决这个问题?即使是第三方库也有帮助。谢谢!

c# xamarin xamarin.forms
2个回答
3
投票

您可以使用

GnssStatus
代替。

GnssStatus
https://learn.microsoft.com/en-us/dotnet/api/android.locations.gnssstatus?view=xamarin-android-sdk-12

OnCreate
方法中添加以下代码:

 LocationManager mLocationManager = (LocationManager)GetSystemService(Context.LocationService);
        mLocationManager.RegisterGnssStatusCallback(new GetSatellites()); 

GnssStatus.Callback:

 public class GetSatellites : GnssStatus.Callback
{
    public int satelliteCount;
    public override void OnSatelliteStatusChanged(GnssStatus status)
    {
        base.OnSatelliteStatusChanged(status);
        satelliteCount = status.SatelliteCount;
        Console.WriteLine("--------------------------"+satelliteCount);
    }
}

不要忘记添加权限。

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  

0
投票

您可以使用

GnssStatus.UsedInFix(Int32)
代替。

Wendy Zang 的答案可能不是您要找的。事实上,GnssStatus.SatelliteCount 在计算最近位置时会计算未使用的卫星数量。您可能希望使用 status.UsedInFix(Int32) 来代替,它指示指定索引处的卫星是否用于计算最近位置。

这是 Wendy Zang 的完整答案:

GnssStatus
https://learn.microsoft.com/en-us/dotnet/api/android.locations.gnssstatus?view=xamarin-android-sdk-12

OnCreate
方法中添加以下代码:

 LocationManager mLocationManager = (LocationManager)GetSystemService(Context.LocationService);
        mLocationManager.RegisterGnssStatusCallback(new GetSatellites()); 

GnssStatus.Callback:

 public class GetSatellites : GnssStatus.Callback
{
    public int satelliteCount;
    public override void OnSatelliteStatusChanged(GnssStatus status)
    {
        base.OnSatelliteStatusChanged(status);
        satelliteCount = status.SatelliteCount;
        Console.WriteLine("--------------------------"+satelliteCount);
        int satellitesUsedInFix = 0;
        for (int i = 0; i < satelliteCount; i++)
        {
            if (status.UsedInFix(i))
                satellitesUsedInFix++;
        }
        Console.WriteLine("--------------------------satellitesUsedInFix : " + satellitesUsedInFix);
    }
}

卫星监听开始时,值可以是:satelliteCount = 32 和 SatellitesUsedInFix = 0。然后 SatelliteCount = 33 和 SatellitesUsedInFix = 6。satelliteCount = 43 和 SatellitesUsedInFix = 11...

不要忘记添加权限。

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
© www.soinside.com 2019 - 2024. All rights reserved.