android - 如何使用 GnssMeasurement 回调获取 Android 7.0 中每个检测到的 GPS 卫星的信噪比?

标签 android gps

在下面显示的代码中,我可以使用 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/

相关文章:

android - 如何从 asset/raw 目录访问文件

c# - 异步操作不会在await命令处停止

android - Android上的DGPS校正

python - 如何计算两个地理坐标的距离?

java - 不能影响始终为空的简单 Double[] 表的值 - 2 个代码之间的比较

ios - 在后台运行的应用程序中自动打开/关闭 GPS 跟踪

android - Firebase OTP 在调试 apk 上工作正常,但不能发布 apk

android - 将 Kotlin 源附加到 AAR 在 Android Studio 中不起作用

Android webview导致点击监听器不触发

android - ArFragment在Activity上隐藏了一些 View ,以编程方式添加它