Энергопотребление при постоянных событиях локации - PullRequest
0 голосов
/ 13 июля 2020

Я использую обновления местоположения в своем коде, похоже, он потребляет слишком много энергии, даже если время события (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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...