
我正在使用网络位置提供商.
我需要每隔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()中停止请求更多更新:
@OverrIDepublic 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位置侦听器经常调用全部内容,希望文章能够帮你解决Android位置侦听器经常调用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)