Android位置侦听器经常调用

Android位置侦听器经常调用,第1张

概述我正在使用网络位置提供商.我需要每隔1小时从我的LocationListener调用一次onLocationChanged方法.这是我的代码:MyLocationListenerlocationListener=newMyLocationListener();locationMangaer.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,3600000,0,lo

我正在使用网络位置提供商.
我需要每隔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位置侦听器经常调用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1115976.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存