gpt4 book ai didi

Android Location Listener 调用非常频繁

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:50:33 30 4
gpt4 key购买 nike

我正在使用网络位置提供商。我需要每 1 小时从我的 LocationListener 调用一次 onLocationChanged 方法。这是我的代码:

MyLocationListener locationListener = new MyLocationListener();   
locationMangaer.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 3600000, 0,locationListener);

但它不起作用。我的 onLocationChanged 调用非常频繁。

我必须使用哪些参数?

最佳答案

来自LocationManager#requestLocationUpdates()文档:

Prior to Jellybean, the minTime parameter was only a hint, and some location provider implementations ignored it. From Jellybean and onwards it is mandatory for Android compatible devices to observe both the minTime and minDistance parameters.

但是,您可以将 requestSingleUpdate() 与 Looper 和 Handler 一起使用,以每小时运行一次更新。


添加
首先,您可以阅读有关 Loopers and Handlers here 的更多信息.

您正在使用 API 8,这是一个不错的选择,但这限制了我们可以调用的 LocationManager 方法,因为大多数方法是在 API 9 中引入的。API 8 只有这三种方法:

requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener)
requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener, Looper looper)
requestLocationUpdates(String provider, long minTime, float minDistance, PendingIntent intent)

我们就用第一种方法吧,最简单。

首先,像往常一样创建您的 LocationManager 和 LocationListener,但是在 onLocationChanged()停止 请求更多更新:

@Override
public void onLocationChanged(Location location) {
mLocationManager.removeUpdates(mLocationListener);
// Use this one location however you please
}

其次,创建几个新的类变量:

private Handler mHandler = new Handler();
private Runnable onRequestLocation = new Runnable() {
@Override
public void run() {
// Ask for a location
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mLocationListener);
// Run this again in an hour
mHandler.postDelayed(onRequestLocation, DateUtils.HOUR_IN_MILLIS);
}
};

当然,您应该在 onPause() 中禁用所有回调,并在 onResume() 中再次启用它们,以防止 LocationManager 通过获取未使用的资源而浪费资源在后台更新。


一个更技术性的观点:
如果您担心使用 LocationManager 阻塞 UI 线程,则可以使用第二个 requestLocationUpdates() 方法从新线程(例如 HandlerThread)提供特定的 Looper。

关于Android Location Listener 调用非常频繁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13093613/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com