Android requestLocationОбновления не работают в Samsung S10 (API 29) - PullRequest
0 голосов
/ 20 апреля 2020

Я разрабатываю приложение для отслеживания устройств. Приложение вызывает передний план / фоновый сервис. Служба будет запрашивать обновление местоположения устройства и получать последнее известное местоположение устройства, а затем отправлять его на сервер каждые 10 секунд.

Странно то, что он работает хорошо на всех моих тестирующих устройствах (Samsung S9 Android 10, Huawei P20 Pro Android 9, Huawei Mate 10 Android 9, Sharp Aquos M1 Android 6) кроме Samsung S10 Android 10.

С какой проблемой я столкнулся:

  1. Когда служба запущена, мой сервер получает данные, отправленные с устройства с последним известным местоположением, каждые 10 секунд. Я использовал Logcat для проверки журнала, приложение будет обновлять местоположение только после переустановки, но только удерживать от 30 секунд до 1 минуты. После этого он больше не будет обновляться.

То, что я тестировал на Samsung S10:

  1. Все необходимые разрешения предоставлены.
  2. Протестировано с использованием и данные Wi-Fi, и данные сотовой связи.
  3. Откройте Google Maps, Google Maps показывает текущее местоположение (Предположим, что после того, как Google Maps запросит местоположение устройства, мое приложение сможет найти то же местоположение?)
  4. My текущий targetSdkVersion составляет 28

OnCreate ()

fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
   mSettingsClient = LocationServices.getSettingsClient(this);
    mLocationCallback = new LocationCallback() {
        @Override
        public void onLocationResult(LocationResult locationResult) {
            super.onLocationResult(locationResult);
            // location is received
            mCurrentLocation = locationResult.getLastLocation();
        }
    };

    mRequestingLocationUpdates = false;

    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(10000);
    mLocationRequest.setFastestInterval(5000);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
    builder.addLocationRequest(mLocationRequest);
    mLocationSettingsRequest = builder.build();

SendGPS ()

 mSettingsClient
                .checkLocationSettings(mLocationSettingsRequest)
                .addOnSuccessListener(new OnSuccessListener<LocationSettingsResponse>() {
                    @SuppressLint("MissingPermission")
                    @Override
                    public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
                            Log.i("SETTINGCLIENT", "All location settings are satisfied.");

                        //noinspection MissingPermission
                        fusedLocationClient.requestLocationUpdates(mLocationRequest,
                                mLocationCallback, Looper.myLooper());

                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                    }
                });

fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);

    fusedLocationClient.getLastLocation()
            .addOnSuccessListener(new OnSuccessListener<Location>() {
                @RequiresApi(api = Build.VERSION_CODES.O)
                @Override
                public void onSuccess(Location location) {
                    // Got last known location. In some rare situations this can be null.
                    if (location != null) {
                    } else{
                    }
                }
            });
...