Android中獲取GPS搜索到的衛星顆數、並獲取每顆衛星的信噪比

信噪比概念

信噪比,英文名稱叫做SNR或S/N(SIGNAL-NOISE RATIO),又稱爲訊噪比。是指一個電子設備或者電子系統中信號與噪聲的比例
信噪比越大此顆衛星越有效(也就是說可以定位)

  • 也就是說 設備搜索到的衛星顆數越多 設備定位效果越好,同時每顆衛星的信噪比值也要越高,如果信噪比值都是0的話;那跟沒有搜索到一顆衛星效果是一樣的。

獲取設備搜索到的衛星顆數

  • 首先就是聲明權限了大於Android M設備記得動態申請
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  • 初始化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);
}
  • 這裏只關心衛星的一些信息,關於位置、經緯度信息這裏就不關心了,所以上面的locationListener就是個空實現;這裏重點看下衛星的獲取,如下:
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();統計總衛星顆數同時獲取每顆衛星的信噪比

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章