Android中搜星功能的实现

2025-10-26 12:59:19

上次我们有说到使用手机自带的GPS进行定位操作。这一次我们要说说关于搜星的问题。我们都知道,我们的GPS定位是依赖于全球卫星导航系统。而现在通行的全球卫星导航主要是三家,美国的GPS,俄罗斯的格洛纳斯,还有就是我们国家的北斗卫星导航。那我们今天就看看如何知道当前手机可以搜到多少卫星。

要想获取到填上的卫星信息,得调用定位管理器LocationManager对象的addGpsStatusListener方法添加定位状态监听器,该监听器需实现GpsStatus.Listener接口的onGpsStatusChanged方法,该方法提供了定位状态变化的事件信息,事件类的取值见下表

GpsStatus类的事件类型说明GPS_EVENT_STARTEDGPS功能开启GPS_EVENT_STOPPEDGPS功能停止GPS_EVENT_FIRST_FIX首次定位GPS_EVENT_SATELLITE_STATUS周期地报告卫星状态最后一个卫星状态报告事件可以获得监测到的卫星信息,一旦捕获该事件,即可调用LocationManager对象的getGpsStatus方法获得当前的定位状态信息GpsStatus,再调用GpsStatus对象的getSatellites方法获得本地检测到的卫星列表。卫星列表是一个GpsSatellite队列,详细的卫星信息可通过GpsSatellite对象的以下方法获得。

getPrn:获取卫星的伪随机码,可以认为是卫星的编号。getAzimuth:获取卫星的方位角。getElevation:获取卫星的仰角。getSnr:卫星的信噪比,即信号强弱。hasAlmanac:卫星是否有年历表。hasEphemeris:卫星是否有星历表。usedInFix:卫星是否被用于近期的GPS修正计算。搜星的具体代码如下。这个要结合之前的卫星定位一起使用。

mLocationMgr.addGpsStatusListener(new GpsStatus.Listener() {

@Override

public void onGpsStatusChanged(int event) {

//获取卫星定位的状态信息

if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

return;

}

GpsStatus gpsStatus = mLocationMgr.getGpsStatus(null);

switch (event) {

case GpsStatus.GPS_EVENT_SATELLITE_STATUS://周期的报告卫星状态

if (!flag) {

//得到所有收到的卫星信息,包括卫星的广度角、方位角、信噪比和卫星编号

Iterable satellitess = gpsStatus.getSatellites();

for (GpsSatellite satellite : satellitess) {

total++;

tv_count.setText("共有" + total + "颗卫星");

String appendStr = "";

if (satellite.getPrn() <= 64 || (satellite.getPrn() >= 120 && satellite.getPrn() <= 138)) {

appendStr = "美国1颗";

} else if (satellite.getPrn() >= 201 && satellite.getPrn() <= 237) {

appendStr = "北斗1颗";

} else if (satellite.getPrn() >= 65 && satellite.getPrn() <= 89) {

appendStr = "格洛纳斯1颗";

} else if (satellite.getPrn() >= 193 && satellite.getPrn() <= 194) {

appendStr = "未知";

}

tv_wx.append(appendStr + "\n");

}

flag = true;

}

break;

case GpsStatus.GPS_EVENT_FIRST_FIX://首次卫星定位

break;

case GpsStatus.GPS_EVENT_STARTED://卫星导航服务开始

break;

case GpsStatus.GPS_EVENT_STOPPED://卫星导航服务停止

break;

}

}

});

这样根据卫星伪代码就可以知道不同卫星是属于哪个国家的了。

8001翡翠腰带冠号大全:全面解析各冠号价格与特点
excel怎么把表格内容全选