GnssStatus.CallBack onSatellStatusChanged() не работает
Я разрабатываю приложение, которое я хочу узнать о количестве спутников GPS. Я использую для этого метод "onSatellStatusChanged", но он не работает. Кусок кода, который я использую ниже, вы видите.
Код
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);
}
}
Примечание: я проверил это снаружи.
1 ответ
Обзор (запросите обновления местоположения, чтобы получить их):
Без явного запроса на обновление местоположения ваше устройство может не запрашивать эту информацию. Следующее работало для меня, где член mGnssStatusCallback
ваш GnssStatus.Callback и Activity (или какой-то другой класс) реализуют LocationListener; вот это занятие это реализует и прохожу this
в качестве окончательного параметра requestLocationUpdates
а также removeUpdates
, 30000
означает, что мы запрашиваем обновления каждые 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 GnssStatusCallback() {
// 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) {
}
⋮
}
Отметим также, что
Обратный вызов GnssStatus
никогда не будет вызван, если поставщик не установлен на GPS_PROVIDER
locmgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30000, 0, this);
Распространенной ошибкой является установка провайдера на NETWORK_PROVIDER