5

我正在开发一个应用程序,我想了解 gps 卫星的数量。我为此使用了“onSatelliteStatusChanged”方法,但它不起作用。你看到的我在下面使用的一段代码。

代码

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            gnssStatusCallBack = new GnssStatus.Callback() {
                @Override
                public void onSatelliteStatusChanged(GnssStatus status) {

                        satelliteCount = status.getSatelliteCount();
                }
            };
            locManager.registerGnssStatusCallback(gnssStatusCallBack);
 } else {
      locManager.addGpsStatusListener(this);
 }
}

注意:我在外面测试过。

4

2 回答 2

9

概述(请求位置更新以接收它们):

如果没有明确要求更新位置,您的设备可能不会搜索此信息。以下对我有用,其中 membermGnssStatusCallback是您的GnssStatus.Callback并且 Activity (或其他类)实现LocationListener;在这里,这个活动实现了它,我将this作为最终参数传递给requestLocationUpdatesand removeUpdates30000表示我们每 30 秒(30000毫秒)请求一次更新,表示0我们只希望设备移动 > 0 米时进行更新。


您可能需要找出可用的提供程序
请参阅Android 培训

例子

public class GnssActivity extends Activity implements LocationListener {
    GnssStatus.Callback mGnssStatusCallback;
    LocationManager mLocationManager;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mLocationManager = 
                (LocationManager) getSystemService(LOCATION_SERVICE);
        mGnssStatusCallback = new GnssStatus.Callback() {
            // TODO: add your code here!
        };

    }

    @Override
    protected void onStart() {
        super.onStart();
        mLocationManager.registerGnssStatusCallback(mGnssStatusCallback);
        mLocationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, 30000, 0, this
        );
    }

    @Override
    protected void onStop() {
        mLocationManager.removeUpdates(this);
        mLocationManager.unregisterGnssStatusCallback(
                mGnssStatusCallback
        );
        super.onStop()
    }

    @Override
    public void onLocationChanged(Location location) {
    }

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

    @Override
    public void onProviderEnabled(String provider) {
    }

    @Override
    public void onProviderDisabled(String provider) {
    }

    ⋮
}
于 2017-05-06T08:23:40.673 回答
1

另请注意,

GnssStatus 回调

如果提供者未设置为GPS_PROVIDER

locmgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30000, 0, this);

一个常见的错误是将提供程序设置为NETWORK_PROVIDER

于 2019-11-22T01:48:51.013 回答