我正在开发一个我想了解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);
}
}
注意:我在外面测试过。
最佳答案
概述(请求位置更新以接收它们):
如果没有明确要求更新位置,则您的设备可能不会寻求此信息。以下对我有用,其中mGnssStatusCallback
成员是您的GnssStatus.Callback,而Activity(或其他一些类)实现LocationListener;在这里,此 Activity 实现了它,我将this
作为最终参数传递给requestLocationUpdates
和removeUpdates
。 30000
指示我们每30秒(30000毫秒)请求更新,而0
指示我们仅在设备移动> 0米时才需要更新。
您可能需要弄清楚哪些提供程序可用,等等。
参见Android Training。
例子
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) {
}
⋮
}