Android的GNSS功能,搜索卫星数量、并获取每颗卫星的信噪比

一、信噪比概念

信噪比,英文名称叫做SNR或S/N(SIGNAL-NOISE RATIO),又称为讯噪比。是指一个电子设备或者电子系统中信号与噪声的比例。
信噪比越大,此颗卫星越有效(也就是说可以定位)。也就是说,设备搜索到的卫星颗数越多,设备定位效果越好,同时每颗卫星的信噪比值也要越高;如果信噪比值都是0的话,那跟没有搜索到一颗卫星效果是一样的。

二、获取设备搜索到的卫星颗数

1、声明权限。大于Android M设备(Android 6.0)需要动态申请以下权限:

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

2、初始化LocationManager类,开启GPS。

//位置管理器
private LocationManager manager;

/**
 * 初始化定位管理
 */
private void initLocation() {
    manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    //判断GPS是否正常启动
    if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
        Toast.makeText(this, "请开启GPS导航", Toast.LENGTH_SHORT).show();
        //返回开启GPS导航设置界面
        Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
        startActivityForResult(intent, 0);
        return;
    }
    //添加卫星状态改变监听
    manager.addGpsStatusListener(gpsStatusListener);
    //1000位最小的时间间隔,1为最小位移变化;也就是说每隔1000ms会回调一次位置信息
    manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, locationListener);
}

3、卫星数量的获取。

private GpsStatus.Listener gpsStatusListener = new GpsStatus.Listener() {
    @Override
    public void onGpsStatusChanged(int event) {
        switch (event) {
            //卫星状态改变
            case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
                //获取当前状态
                GpsStatus gpsStatus = manager.getGpsStatus(null);
                //获取卫星颗数的默认最大值
                int maxSatellites = gpsStatus.getMaxSatellites();
                //获取所有的卫星
                Iterator<GpsSatellite> iters = gpsStatus.getSatellites().iterator();
                //卫星颗数统计
                int count = 0;
                StringBuilder sb = new StringBuilder();
                while (iters.hasNext() && count <= maxSatellites) {
                    count++;
                    GpsSatellite s = iters.next();
                    //卫星的信噪比
                    float snr = s.getSnr();
                    sb.append("第").append(count).append("颗").append(":").append(snr).append("\n");
                }
                Log.e("TAG", sb.toString());
                break;
            default:
                break;
        }
    }
};
  • 通过遍历 gpsStatus.getSatellites();统计总卫星颗数,同时获取每颗卫星的信噪比。结果如下:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值