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

Другие вопросы по тегам