Android定位提供程序需要太长时间才能暂时不可用。

5
根据这篇文章(UPD:链接已删除,因为现在它会导致一些垃圾信息),当请求位置更新时,设置minTime将导致提供程序将自身设置为TEMPORARILY_UNAVAILABLE,以节省电池电量,持续minTime毫秒。在此期间,GPS提供程序将关闭并且GPS图标将消失。
在我的代码中,我将minTime设置为大约30秒,但是提供程序每五分钟才会变为TEMPORARILY_UNAVAILABLE。当它这样做时,在最多十秒钟的时间内保持TEMPORARILY_UNAVAILABLE,然后重新打开。我知道这是因为GPS图标只在消失十秒钟后重新出现。
我知道minTime设置只是Android位置提供程序的粗略指南...但我非常确定五分钟与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参数了吗?另一方面,在考虑minDistance之前应该先考虑minTime。所以可能不是那个问题.. -.- - icyerasor
1个回答

0

API中可以得知:

"后台服务在设置足够高的minTime时应当小心谨慎,以避免通过一直保持GPS或无线电工作来消耗过多的电量。特别地,不建议使用小于60000ms的值。"(强调属于本人)

"此字段仅用作提示以节省电源,实际位置更新之间的时间可能大于或小于此值"(强调属于本人)。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接