Android Locationprovider 需要很长时间才能暂时不可用

Posted

技术标签:

【中文标题】Android Locationprovider 需要很长时间才能暂时不可用【英文标题】:Android Locationprovider takes too long to become temporarily unavailable 【发布时间】:2011-07-09 23:41:04 【问题描述】:

根据这篇文章(UPD: 链接已删除,因为它现在会导致一些废话),在请求位置更新时设置 minTime 将导致提供者将自己设置为TEMPORARILY_UNAVAILABLE 持续 minTime 毫秒,以节省电池电量。在这段不活动期间,GPS 提供程序将自行关闭,并且 GPS 图标将消失。

在我的代码中,我将 minTime 设置为大约 30 秒,但提供者每五分钟才变为 TEMPORARILY_UNAVAILABLE 一次。当它这样做时,它最多只会保持 TEMPORARILY_UNAVAILABLE 十秒钟,然后再重新打开。我知道这一点,因为 GPS 图标仅消失了十秒钟,然后再次出现。

我了解 minTime 设置只是 android 位置提供程序的粗略指导...但我很确定 5 分钟与 30 秒完全不同。有谁知道这里发生了什么? minTime 和 requestLocationUpdates 究竟是如何工作的?

LocationManager 设置:

locManager = (LocationManager) getSystemService(LOCATION_SERVICE);
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,30000L, 0, locListener);

locListener:

public void onLocationChanged(Location loc) 
    //Keep track of best location
    //Having a location > no location
    if (bestLocation == null)
        bestLocation = loc;
    //More accuracy > Less accuracy
    else if (loc.getAccuracy() <= bestLocation.getAccuracy())
        bestLocation = loc;

    Log.d(TAG, "Location Updated";

public void onStatusChanged(String provider, int status, Bundle extras) 
    Log.d(TAG, "New status: " + status);
    if (status== LocationProvider.TEMPORARILY_UNAVAILABLE)
        //Do stuff since the provider is temporarily off

在真正的 Android 设备上调试输出(HTC Incredible 2.2):

Location Updated
Location Updated
New status: 2
Location Updated
Location Updated
Location Updated
New status: 2
... (five minutes later)
New status: 1

【问题讨论】:

您是否尝试过增加 minDistance 参数?另一方面,minTime 应考虑 minDistance 之前。所以它可能不是那个.. -.- 【参考方案1】:

来自API:

“后台服务应注意设置足够高的 minTime,以使设备不会通过始终保持 GPS 或无线电波开启而消耗过多电量。尤其不建议 低于 60000 毫秒的值.”(重点是我的)

“此字段仅用作提示以节省电量,位置更新之间的实际时间可能大于或小于此值。” (重点是我的)。

如果您需要立即知道位置,请使用getLastKnownLocation(String)

【讨论】:

以上是关于Android Locationprovider 需要很长时间才能暂时不可用的主要内容,如果未能解决你的问题,请参考以下文章

如何添加安装我自己的 LocationProvider?

Android Locationprovider 需要很长时间才能暂时不可用

如果 WiFi 关闭,Android 的 network_provider locationprovider 从不返回任何内容?

可以禁用 $locationProvider 和 $routeProvider 吗?

Angularjs : $locationProvider.hashPrefix("!") ;

使用 locationProvider 时,刷新浏览器网页不会在 ui-router 中加载