根据这篇文章( 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
答案 0 :(得分:0)
来自API:
“后台服务应该注意设置足够高的minTime,以便设备不会因为始终保持GPS或无线电设备而消耗太多电量。特别是,不建议使用低于60000ms的值“(强调是我的)
“此字段仅用作提示以节省电量,位置更新之间的实际时间可能大于或小于此值。” (重点是我的)。
如果您需要立即知道该位置,请使用getLastKnownLocation(String)