定期获取位置(坐标),而不会显着增加电池消耗

tom*_*rod 6 android locationmanager android-location google-play-services battery-saver

我正在开发一个Android应用程序; 此应用程序需要定期(每10分钟)将当前位置(共存)发送到Web服务.但是......对于更正确的方式(对设备电池更友好)我有点困惑.

我读了这个答案,她的方法_getLocation()很好看; 但我不知道这种方法是否可以获得我需要的位置; 总可用性......

我想,如果使用GSM/WIFI无法使用该位置,应用程序会选择GPS方法.

是什么使这种方法?

private void _getLocation() {
    // Get the location manager
    LocationManager locationManager = (LocationManager) 
            getSystemService(LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    String bestProvider = locationManager.getBestProvider(criteria, false);
    Location location = locationManager.getLastKnownLocation(bestProvider);
    try {
        lat = location.getLatitude();
        lon = location.getLongitude();
    } catch (NullPointerException e) {
        lat = -1.0;
        lon = -1.0;
    }
}
Run Code Online (Sandbox Code Playgroud)

任何人都知道一种方法来定期获取设备的坐标...而不会大幅增加电池消耗?

Oha*_*dok 4

如果您担心电池电量并且对 10 分钟间隔没有那么严格,您可以尝试使用 PassiveProvider 而不是 GPS/Coarse。
通常其他应用程序会经常请求位置,因此您无需担心。
如果你要求严格,那么你可以尝试自己询问位置,以防在过去的时间间隔内没有收到信息。
这是使用被动提供程序的示例。

LocationManager locationManager = (LocationManager) this
        .getSystemService(Context.LOCATION_SERVICE);
LocationListener locationListener = new LocationListener() {

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {}

    @Override
    public void onProviderEnabled(String provider) {}

    @Override
    public void onProviderDisabled(String provider) {}

    @Override
    public void onLocationChanged(Location location) {
        // Do work with new location. Implementation of this method will be covered later.
        doWorkWithNewLocation(location);
    }
};

long minTime = 10*60*1000;
long minDistance = 0;

locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, minTime, minDistance, locationListener);
Run Code Online (Sandbox Code Playgroud)