Я разрабатываю приложение для отслеживания устройств. Приложение вызывает передний план / фоновый сервис. Служба будет запрашивать обновление местоположения устройства и получать последнее известное местоположение устройства, а затем отправлять его на сервер каждые 10 секунд.
Странно то, что он работает хорошо на всех моих тестирующих устройствах (Samsung S9 Android 10, Huawei P20 Pro Android 9, Huawei Mate 10 Android 9, Sharp Aquos M1 Android 6) кроме Samsung S10 Android 10.
С какой проблемой я столкнулся:
- Когда служба запущена, мой сервер получает данные, отправленные с устройства с последним известным местоположением, каждые 10 секунд. Я использовал Logcat для проверки журнала, приложение будет обновлять местоположение только после переустановки, но только удерживать от 30 секунд до 1 минуты. После этого он больше не будет обновляться.
То, что я тестировал на Samsung S10:
- Все необходимые разрешения предоставлены.
- Протестировано с использованием и данные Wi-Fi, и данные сотовой связи.
- Откройте Google Maps, Google Maps показывает текущее местоположение (Предположим, что после того, как Google Maps запросит местоположение устройства, мое приложение сможет найти то же местоположение?)
- 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{
}
}
});