在下面显示的代码中,我可以使用 GnssStatus.callback 在 Android 7.0 和更高版本的 API 中获取可见卫星的数量。但是我无法获得每个检测到的卫星的相关信噪比,因为 GnssStatus.callback 没有受支持的功能。
我检查了this链接并发现我们应该使用 GnssMeasurement 回调并调用 (getsnrindb()) 作为 here .
如何使用(GnssMeasurement 回调)获取 SNR 值?
我的代码:
tv1 = (TextView) findViewById(R.id.Gps_location);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
mGnssStatusCallback = new GnssStatus.Callback() {
// TODO: add your code here!
@Override
public void onSatelliteStatusChanged(GnssStatus status) {
satelliteCount = status.getSatelliteCount();
sat_id = status.getSvid(1);
constellationType = status.getConstellationType(1);
v = " Scan: "+ (count)+ " ,Sat-count=" +(satelliteCount) +"id="+ sat_id +" type"+ constellationType + " ,Eacc= "+accuracy+ "\n\n";
v += tv1.getText();
tv1.setText(v);
count= count + 1;
}
};
@Override
protected void onStart() {
super.onStart();
mLocationManager.registerGnssStatusCallback(mGnssStatusCallback);
mLocationManager.registerGnssMeasurementsCallback(mGnssMeasurmentscallbak);
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30000, 0, this);
}
@Override
protected void onStop() {
mLocationManager.removeUpdates(this);
mLocationManager.unregisterGnssStatusCallback(
mGnssStatusCallback
);
super.onStop();
}
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
if (locationManager != null) {
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
accuracy = location.getAccuracy();
}
}
}
最佳答案
通过 getSatelliteCount() 使用 GnssStatus.Callback() 计算 GPS 信号强度,它为我们提供了我们可及范围内的卫星数量,并且每个卫星都有一个信噪比 (getCn0DbHz(i) ).
//Android N(7.0)及以上状态和监听
private GnssStatus.Callback mGnssStatusCallback ;
mGnssStatusCallback = new GnssStatus.Callback() {
@Override
public void onSatelliteStatusChanged(GnssStatus status) {
int satelliteCount = status.getSatelliteCount();
int usedSatellites = 0;
float totalSnr = 0;
for (int i = 0; i < satelliteCount; i++){
if (status.usedInFix(i)) {
usedSatellites++;
totalSnr += status.getCn0DbHz(i); //this method obtains the signal from each satellite
}
}
// we calculate the average of the power of the GPS signal
float avgSnr = (usedSatellites > 0) ? totalSnr / usedSatellites: 0.0f;
Log.d(TAG, "Number used satelites: " + usedSatellites + " SNR: " + totalSnr+"avg SNR: "+avgSnr);
}
};
try {
mLocationManager.registerGnssStatusCallback(mGnssStatusCallback);
} catch (SecurityException e) {
Log.e(TAG,"Error "+e);
}
关于android - 如何使用 GnssMeasurement 回调获取 Android 7.0 中每个检测到的 GPS 卫星的信噪比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48200672/