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

Android 定期获取位置(坐标),而不会显著增加电池消耗,android,google-play-services,locationmanager,android-location,battery-saver,Android,Google Play Services,Locationmanager,Android Location,Battery Saver,我正在开发一个Android应用程序;此应用程序需要定期(每10分钟)向web服务发送当前位置(coordenates)。但是我对更正确的方法(对设备电池更友好)有点困惑 我读了这篇文章,她的方法\u getLocation()看起来不错;但我不知道这种方法是否能得到我需要的位置;总可用性 我想,如果无法使用GSM/WIFI进行定位,请选择GPS方法 这就是这种方法的原因吗 private void _getLocation() { // Get the location manager

我正在开发一个Android应用程序;此应用程序需要定期(每10分钟)向web服务发送当前位置(coordenates)。但是我对更正确的方法(对设备电池更友好)有点困惑

我读了这篇文章,她的方法
\u 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;
    }
}

任何人都知道一种定期获取设备坐标的方法。。。在不大幅增加电池消耗的情况下?

Play Services具有低消耗的位置API。您可以在中找到更多信息

更新

您可以找到存储在Github中的Play Location Service示例。看看这个例子


设置位置请求时,您可以更改优先级,请参阅更多信息。我认为您可以使用
优先级\u平衡\u功率\u精度

如果您担心电池问题,并且对10分钟间隔没有太严格的要求,您可以尝试使用无源Provider,而不是GPS/粗糙。
通常其他应用程序请求位置的频率足够高,因此您无需担心。
如果您要求严格,那么您可以尝试自己询问位置,以防在过去的时间间隔内没有收到地址。
下面是一个使用被动提供程序的示例。

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);

如果您担心电池消耗,因此担心位置更新有点晚,您应该检查无源Provider。它借助于其他使用定位服务的应用程序;谢谢你的评论。是的,我很担心这些事情。你能给我举一个关于
无源Provider
的例子吗?请看下面我的答案。这可能是重复的,谢谢你的帮助@ClarkXP。我可以问一下@Ohad Zadok的评论吗?在节省电池和设备的位置可用性方面,您的示例是否比
无源Provider
更好?@tomloprod我认为Play Services更容易设置,更有效地管理位置源和能源消耗。请参阅我的更新我不同意,因为被动provider不会自行启动GPS,它根本不使用能源。@OhadZadok当其他位置源不可用时,此功能可能会出现问题,如果该位置无法使用GSM/WIFI,Play Service可以激活GPS提供器,确保应用程序的功能。这是正确的,他必须涵盖这一情况。但以我10分钟的间隔和低准确度的经验来看,这种情况很少发生。即使在手机挂起的情况下,这种狙击手也会获得coords?你说的手机挂起是什么意思?如果位置服务关闭,您将无法获得位置更新。您仍然可以注册locationListener,但不会调用它。您好@Ohad,谢谢您的回复,我的意思是:黑屏、锁定屏、黑屏、idk正确的术语。。。就像当你按下关机按钮,屏幕将关闭,但我的手机仍然打开。