Я использую обновления местоположения в своем коде, похоже, он потребляет слишком много энергии, даже если время события (Intervel) установлено на> 75 se c. Я новичок в Android и не уверен, что делаю неправильно. Проект требует, чтобы события постоянного местоположения отправлялись на сервер (я использую Firebase) в фоновой службе. и он потребляет слишком много энергии.
public void registerLocationChange(long intervel) {
// Get last known recent location using new Google Play Services SDK (v11+)
if (locationClient == null) {
locationClient = getFusedLocationProviderClient(this);
}
if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
if (mLocationRequest == null) {
mLocationRequest = new LocationRequest();
}
mLocationRequest.setInterval(intervel);
mLocationRequest.setFastestInterval(intervel);
if (GiTrackSingleton.getInstance().getisCityLimit() == true) {
mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
} else {
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
}
if(locationCallback == null) {
locationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
// Toast.makeText(getApplicationContext(), "Location Event", Toast.LENGTH_SHORT).show();
locationEventTriggered = true;
onLocationChanged(locationResult.getLastLocation());
}
};
}
locationClient.requestLocationUpdates(mLocationRequest, locationCallback, Looper.myLooper());
GiTrackSingleton.getInstance().setisLocationAvailable(true); // set initial as true
long countDownTimerTicks = intervel * 3; // 15000; // 3 events time for health checking
if(locationHealthTimer == null) {
locationHealthTimer = new CountDownTimer(countDownTimerTicks, countDownTimerTicks) {
@Override
public void onTick(long l) {
}
@Override
public void onFinish() {
if (!locationEventTriggered) {
onLocationChanged(null);
// Toast.makeText(getApplicationContext(), "No Location Available", Toast.LENGTH_SHORT).show();
}
switchBetweenGPSModes(GiTrackSingleton.getInstance().getAccuracy());
locationEventTriggered = false;
locationHealthTimer.start();
// Toast.makeText(getApplicationContext(), "Timer event", Toast.LENGTH_SHORT).show();
}
}.start();
}
else
{
// if(locationHealthTimer.)
locationHealthTimer.start();
}
locationClient.flushLocations();
}