Android中獲取GPS搜尋到的衛星顆數、並獲取每顆衛星的信噪比
阿新 • • 發佈:2019-02-08
信噪比概念
信噪比,英文名稱叫做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();統計總衛星顆數同時獲取每顆衛星的信噪比