我想创建一个应用程序,它在上午9:00到晚上9:00之间每5分钟获取一次用户的位置。现在我无法思考流程。我很困惑:我是否应该实现2个重复警报管理器,一个用于每5分钟,另一个用于时间段。?或者以某种方式做到这一点,每5分钟触发一次警报并检查它是否在时间段之间,然后只运行位置服务并上传到服务器工作。?请帮我提建议/忠告。如何在手机电池、效率方面以最佳方式实现这一点。 最佳答案 您不应将Handler.postDelayer()用于超过30秒的时间间隔,因为它可能会导致内存泄漏。制定几个策略-一个用于短时间间隔-小于30秒,使用Handl
我想创建一个具有特定时间和给定周期的运行作业。例如,我想在每个月的第二天安排一个作业,它应该每个月都运行。查看JobInfo.Builderdocumentation我还没有找到设置初始延迟的方法。关于如何实现这一目标的任何想法?这是以正确的周期运行但不是我想要的初始延迟的代码:funbuild(application:Application,periodicity:Days,startDay:Days){valserviceComponent=ComponentName(application,GenerateDebtJobService::class.java)valbuilder
初学者,我有一个简单的问题。在Android中,定期检查什么是最好的?请耐心等待,我会尽力解释--例如,我的音频应用非常简单,一个主要Activity和一个服务。主要Activity有一个带有两个按钮的用户界面,启动和停止音频。我按下启动键,音频服务启动。同样,当我单击“停止”时,服务停止并且音频结束。如果isLooping()被硬编码为true则没有问题,因为音频永远不会结束,除非我按下停止按钮,这会停止音频服务并重置按钮状态。现在这是一个问题,因为我将isLooping()设置为false,因此音频不会循环播放。因此音频将停止播放但服务仍在运行。我希望能够检测到音频何时停止,以便我
场景:在很长一段时间内(即12小时)每30秒向服务器发送一次以在后台获取任何新数据。位置数据需要与此一起发送。当前实现;服务等级;位置监听器,间隔30秒,将经度和纬度值设置为两个局部变量警报管理器每30秒向广播接收器触发一次未决Intent。广播接收器在extras中启动一个带有位置变量的IntentService。IntentServicehttp发布位置并从服务器请求任何新数据。IntentService通过广播接收器将服务器响应发送回主服务类。服务类starts_sticky以确保操作系统重新启动。我尝试了几种不同的变体;我尝试使用Handler和runnable来处理发送到服务
请参阅下面的更新部分,了解我修改后的解决方案目标定期轮询URL(例如每30秒一次),但仅当Activity处于前台时如果Activity不在前台则停止轮询定期执行Handler对象通过postDelayed方法接收Runnable对象在Runnable对象的run方法中启动AsyncTask在AsyncTask的onPostExecute中再次调用Handler对象的postDelayed在activity的onResume中,调用Handler对象的post方法在activity的onPause中,调用Handler对象的removeCallbacks移除消息队列中Runnable的
我正在尝试编写一项服务,该服务将每隔X分钟尝试获取设备的GPS位置,并在后台运行和记录,即使应用程序未处于焦点状态也是如此。那么,是时候创建服务了。我创建了一个服务,设置了locationListener,获得了位置管理器和requestLocationUpdates...世界上一切都很好..基本框架工作。现在,我不希望GPS持续运行,因为这会耗尽电池电量,我希望发生的是服务,启动GPS,请求更新,然后关闭(至少它对gps位置)然后5或10分钟后再次执行此操作..很简单,在我的监听器的onLocationChanged()方法上,我添加了行LocationManager(removeU
我注意到Android设备接收到的低功耗蓝牙信号强度是周期性变化的。下图表示一个BLE信标在两分钟内的RSSI值。接收机器人和信标都是静止的,距离为1米。我确保干扰尽可能少。Android是Nexus5,但我在其他Android设备上遇到了同样的现象,它们都运行在API21上。我还不能在iOS上测试它。RSSIGraph您可以看到RSSI有3个主要级别,每15秒重复一次,如低->中->高->低->中->高等。我的猜测是android端的原因,不知道是硬件原因还是软件原因。为什么RSSI随时间循环?谁能解释一下? 最佳答案 在阅读了很
我从来没有以直接的方式完成这项工作。对不起,如果我有点含糊。我将尝试详细说明我正在尝试做的事情。我正在尝试构建一个从Web服务中获取数据的ListView。初始化ListView后,我想定期轮询网络服务器并更新ListView的内容。为此,我正在做这样的事情:publicclassSampleAutoUpdateListextendsActivity{//AutoupdatehandlerprivateHandlerhandler=newHandler();privateRunnableupdater=newRunnable(){publicvoidrun(){/**Updatethe
我在这里阅读了很多问题,但无法弄清楚问题是什么。我正在为Android编写现场服务应用程序。在其中一个Activity(MyActivity.java)中,我有两个按钮:开始和停止。当现场工作人员按下开始时,我需要通过GPS获取他的当前位置并及时将其发送到服务器(假设默认为5分钟,这里我将其设置为20秒以进行测试)。客户希望通过此查看worker在交通中花费了多长时间,我所在的城市(Istanbul尔)的交通一团糟。我的Activity中有一个AlarmManager,当按下开始按钮时,AlarmManager.setRepeating()设置警报以启动服务(ServiceClass.
我在使用SyncAdapter时遇到问题。最奇怪的是,它之前可以正常工作,但现在仅当我手动调用它时同步才有效。它也不适用于模拟器(API24)这是我的同步适配器代码:publicclassSmogAppSyncAdapterextendsAbstractThreadedSyncAdapter{privatestaticfinalStringLOG_TAG=SmogAppSyncAdapter.class.getSimpleName();publicstaticfinalintSYNC_INTERVAL=60;//60*60=1htothenearest20min.publicstati