Android最新API获取北斗卫星定位信息(全网最新)

       前段时间北斗导航系统全球组网的最后一个卫星编组入网的消息可谓是使我广大同学都大大振奋了一把,作为一个地道的码工,第一时间想到了怎么用Android系统的API获取北斗导航的相关参数。先去北斗官网逛了一圈,发现并没有针对移动设备开放的api。没关系,条条大路通北京,咱们还有别的方案,去Android系统api求证,看看是否有北斗相关信息。一查,果真有!good!

在Android源码里,最新的卫星信息实体类里里面,有几个非常耀眼的全局常量,各位客官上眼:

Android最新API获取北斗卫星定位信息(全网最新)Android最新API获取北斗卫星定位信息(全网最新)

这几个常量是,目前主流的导航系统的分类,北斗的汉语拼音beidou几个闪耀的大字赫赫在目,激动不,意外不,直上云霄了不!没错,Android源码里早就有了咱们北斗的标记,接下来看看主要代码,怎么获取卫星信息及区别出北斗卫星的信息,有几个常用的公用方法来获取卫星的一些详细信息,当然不可能太详细,

Android最新API获取北斗卫星定位信息(全网最新)

咱们看看在代码里怎么写吧,如下

/**
 * 初始化定位管理,android自带卫星
 */
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;
    }
    //添加卫星状态改变监听
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) !=     PackageManager.PERMISSION_GRANTED) {
        return;
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        manager.registerGnssStatusCallback(new LocaCallback());
    }
    //1000位最小的时间间隔,1为最小位移变化;也就是说每隔1000ms会回调一次位置信息
    manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, new LocationListener() {

        @Override
        public void onLocationChanged(Location location) {
            tv_loc.setText("经度:"+location.getLongitude()+",纬度:"+location.getLatitude());
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {

        }

        @Override
        public void onProviderEnabled(String provider) {

        }

        @Override
        public void onProviderDisabled(String provider) {

        }
    });
}

上段代码是初始化卫星定位管理类的,主要一段代码是manager.registerGnssStatusCallback(new LocaCallback());此句是设置卫星转态回调类,这个类需要自己实现并继承GnssStatus.Callback,如下

@RequiresApi(api = Build.VERSION_CODES.N)
public class LocaCallback extends GnssStatus.Callback {
    @Override
    public void onSatelliteStatusChanged(GnssStatus status) {
        super.onSatelliteStatusChanged(status);
        satelliteCount=status.getSatelliteCount();
        //解析组装卫星信息
        makeGnssStatus(status,satelliteCount);
    }

    @Override
    public void onStarted() {
        super.onStarted();
    }

    @Override
    public void onStopped() {
        super.onStopped();
    }
}

上段代码makeGnssStatus(status,satelliteCount);方法,如下

@RequiresApi(api = Build.VERSION_CODES.N)
private void makeGnssStatus(GnssStatus status,int satelliteCount){
    //当前可以获取到的卫星总数,然后遍历
    if(satelliteCount>0){
        for (int i = 0; i < satelliteCount; i++) {
            //GnssStatus的大部分方法参数传入的就是卫星数量的角标
            //获取卫星类型
            int type=status.getConstellationType(i);
            if(GnssStatus.CONSTELLATION_BEIDOU==type){
                //北斗卫星类型的判断
            }
        }
    }
}

好,以上几个方法就能,完全获取到所需要的卫星信息。