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