小智 21
要获得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+")");
}
Run Code Online (Sandbox Code Playgroud)
由于 Android API 24GpsStatus已弃用,因此应该使用GnssStatus. 让我们有一个处理 Gps 数据的活动或服务并且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);
....
}
Run Code Online (Sandbox Code Playgroud)
initCallbacks()应该在locationManager初始化后调用。deinitCallbacks()当不再需要有关卫星数量的信息时,例如在 中,应该调用onDestroy()。 GnssStatus.getSatelliteCount()返回已知卫星的总数,GnssStatus.usedInFix(int i)表明第 i 颗卫星是否已用于最实际的位置捕获。
| 归档时间: |
|
| 查看次数: |
23091 次 |
| 最近记录: |