Как исправить, что LocationManager и GpsStatus не возвращают спутники - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь настроить действие, которое при доступе скажет пользователю, сколько спутников GPS доступно и насколько сильный сигнал, но так как я не могу даже получить номер спутника, я вроде застрял.

И теперь, когда я пытался заставить его работать более месяца, создав код для выполнения этого в самом задании или до нескольких классов, которые расширяют или реализуют GpsStatus, GpsStatus.Listener или LocationManager, я Я в недоумении кто-нибудь есть идеи?

Весь этот код находится в самой деятельности. Я отключил все виды использования классов и кода, которые я пробовал, но не смог приступить к работе, это самое близкое, что я получил, и ни одна из подсчитывающих переменных не возвращает ничего, кроме нуля.

@TargetApi(Build.VERSION_CODES.N)
public void countSatellites(){

    int satellites = 0;
    int satellitesInFix = 0;

    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    GpsStatus status = locationManager.getGpsStatus(null);

    Iterable sats = status.getSatellites();
    Iterator satI = sats.iterator();
    int count = 0;

    while(satI.hasNext()){

        GpsSatellite gpssatellite = (GpsSatellite) satI.next();

        if (gpssatellite.usedInFix()){

            count++;

        }

    }


    int timetofix = locationManager.getGpsStatus(null).getTimeToFirstFix();


    for (GpsSatellite sat : locationManager.getGpsStatus(null).getSatellites()) {

        if (sat.usedInFix()) {

            satellitesInFix++;

        }

        satellites++;

    }


}

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {

    switch (requestCode) {

        case 1: {

            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                if (checkLocationPermission()) {

                    countSatellites();

                }

            } else {


            }

            return;

        }


    }

}


public boolean checkLocationPermission() {

    String permission = "android.permission.ACCESS_FINE_LOCATION";

    int res = this.checkCallingOrSelfPermission(permission);

    return (res == PackageManager.PERMISSION_GRANTED);

}


@TargetApi(Build.VERSION_CODES.M)
@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_connections);

    LocationUpdateService locationService = new LocationUpdateService();

    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);


}

В другом файле

public class LocationUpdateService extends Service implements GpsStatus.Listener{

    public void onCreate(){

        Log.i("on create", "success");

        super.onCreate();
        registerGpsStatusListener();

    }

    private void registerGpsStatusListener() {

        Log.i("gps listener", "success");

        ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);
        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        locationManager.addGpsStatusListener(this);

    }

    @Override
    public void onGpsStatusChanged(int event) {

        Log.i("gps change", "success");

        switch (event) {

            case GpsStatus.GPS_EVENT_STARTED:

                Log.e("gps started", "onGpsStatusChanged started");
                break;

            case GpsStatus.GPS_EVENT_STOPPED:

                Log.e("gps stopped", "onGpsStatusChanged stopped");
                break;

            case GpsStatus.GPS_EVENT_FIRST_FIX:

                Log.e("gps first", "onGpsStatusChanged first fix");
                break;

            case GpsStatus.GPS_EVENT_SATELLITE_STATUS:

                Log.e("gps status", "onGpsStatusChanged status");
                break;

        }

    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        Log.i("on bind", "success");
        return null;
    }


    public void onLocationChanged(Location location) {

    Log.i("location change", "success");

    }
}
...