我正在使用GPS提供者和LocationListener.onLocationChanged(定位位置)来接收位置修复。
文档说,Location.getExtras()包含下一个键/值对:
卫星-用于获取修复程序的卫星数量
但在实践中,我得到了一个空的额外的对象-那里没有任何数据。
这是不是意味着我得到的是A-GPS修正而不是GPS?
发布于 2012-09-28 11:58:30
要获得GPS引擎使用的卫星数量,您需要实现android.location.GpsStatus.Listener
并实现其方法onGpsStatusChanged()
。
例如..。
public void onGpsStatusChanged(int event) {
int satellites = 0;
int satellitesInFix = 0;
int timetofix = locationManager.getGpsStatus(null).getTimeToFirstFix();
Log.i(TAG, "Time to first fix = " + timetofix);
for (GpsSatellite sat : locationManager.getGpsStatus(null).getSatellites()) {
if(sat.usedInFix()) {
satellitesInFix++;
}
satellites++;
}
Log.i(TAG, satellites + " Used In Last Fix ("+satellitesInFix+")");
}
发布于 2013-11-13 15:09:59
我使用Location.getExtras().getInt(“卫星”),它给出正在使用的卫星数量。
发布于 2022-07-21 07:05:51
由于Android 24不推荐使用GpsStatus
,因此应该使用GnssStatus
。让我们有一个活动或服务处理全球定位系统数据和LocationManager
已经创建。
private GnssStatus.Callback gnssCallback;
public void initCallbacks() {
....
gnssCallback = new GnssStatus.Callback() {
@Override
public void onSatelliteStatusChanged(@NonNull GnssStatus status) {
final int satelliteCount = status.getSatelliteCount();
int usedCount = 0;
for (int i = 0; i < satelliteCount; ++i)
if (status.usedInFix(i))
++usedCount;
Log.d("MyServiceTag", "satellites count = " + satelliteCount + ", used = " + usedCount);
}
};
locationManager.registerGnssStatusCallback(gnssCallback, new Handler(Looper.myLooper()));
....
}
public void deinitCallbacks() {
....
locationManager.unregisterGnssStatusCallback(gnssCallback);
....
}
initCallbacks()
应该在locationManager
初始化后调用。当不再需要关于卫星数量的信息时,应该调用deinitCallbacks()
,例如在onDestroy()
中。GnssStatus.getSatelliteCount()
返回已知卫星的总数,GnssStatus.usedInFix(int i)
告诉第一颗卫星是否被用于最实际的位置捕获。
https://stackoverflow.com/questions/6580603
复制相似问题