Android手机获取GPS卫星数量问题
发布时间
阅读量:
阅读量
最近开发了一个功能,在其中一项需求中需要将自己所在的位置数据传输给追踪系统进行实时更新。然而,在实际应用过程中我发现有时会出现这样的情况:当GPS信号较弱或完全无信号时(即在GPS信号较差的情况下),所发送的位置信息可能会出现偏差甚至无法准确捕捉到目标位置点(即无法实现该功能)。
我想了解当前能够搜索到多少颗卫星,并且只有当搜索结果超过4颗时才允许开启这个功能,在网上的代码实现通常如下所示
locationManager.addGpsStatusListener(statusListener);
private final GpsStatus.Listener statusListener = new GpsStatus.Listener() {
public void onGpsStatusChanged(int event) { // GPS状态变化时的回调,如卫星数
GpsStatus status = locationManager.getGpsStatus(null); // 取当前状态
updateGpsStatus(event, status);
}
};
private void updateGpsStatus(int event, GpsStatus status) {
if (event == GpsStatus.GPS_EVENT_SATELLITE_STATUS) {
int maxSatellites = status.getMaxSatellites();
Iterator<GpsSatellite> it = status.getSatellites().iterator();
numSatelliteList.clear();
int count = 0;
while (it.hasNext() && count <= maxSatellites) {
GpsSatellite s = it.next();
numSatelliteList.add(s);
count++;
}
// Toast.makeText(mContext, "当前星颗数="+count, Toast.LENGTH_SHORT).show();
}
}
问题在于不管我在哪里 这个卫星数量总能搜索到大约10颗以上 不过我的OnLocationChanged()这个回调却一直没有被调用 这意味着目前的GPS信号非常微弱 无法搜索到这么多星 这让我意识到 可能在某些情况下 卫星确实存在 但由于它们的质量不高 所以无法被可靠捕获 因此 我决定寻找一种能够更好地评估现有信号的方法 经过思考 最终我发现 s.getSnr() 这个函数专门用于获取卫星的信噪比 这可以帮助我了解当前信号的质量与强度 我通过打印结果发现 大部分卫星显示出零分贝以下的信噪比 这意味着它们要么不存在 要么无法有效捕获 因此 我决定对上述代码进行了优化
private void updateGpsStatus(int event, GpsStatus status) {
if (event == GpsStatus.GPS_EVENT_SATELLITE_STATUS) {
int maxSatellites = status.getMaxSatellites();
Iterator<GpsSatellite> it = status.getSatellites().iterator();
numSatelliteList.clear();
int count = 0;
while (it.hasNext() && count <= maxSatellites) {
GpsSatellite s = it.next();
if(s.getSnr()!=0)//只有信躁比不为0的时候才算搜到了星
{
numSatelliteList.add(s);
count++;
}
//Toast.makeText(mContext, "当前星颗数="+count, Toast.LENGTH_SHORT).show();
}
}
这样就可以准确判断当前卫星数量了
全部评论 (0)
还没有任何评论哟~
