草庐IT

Android GPS 跟踪和 WakeLock

coder 2023-12-09 原文

我需要在 Android 手机上进行后台 GPS 跟踪,目前我计划有两种情况:

  1. 当手机连接到(汽车)充电器时,获取频繁的 GPS 位置(每分钟)。
  2. 当手机未连接充电器时,仅每 5-30 分钟轮询一次位置,具体取决于电池受影响的程度。

我知道我需要在服务中实现跟踪,并且可能会显示通知以使服务保持 Activity 状态。但是,我了解到手机可能随时进入休眠模式,这会停止 GPS 跟踪。

对于这些情况,进行持续后台 GPS 跟踪、手机不会进入休眠状态并且不会消耗太多电量的最佳方法是什么?

到目前为止,我收集了以下内容:

对于场景 1,我可能需要获取 WakeLock,并始终保持 CPU 处于唤醒状态(但屏幕可能会休眠)。 MyTracks 应用程序似乎在 TrackRecordingService 中执行此操作. OpenGPSTracking 似乎做 the same .

对于场景 2,我可以使用 AlarmManager 安排每 x 分钟检查一次。我的服务需要获取临时唤醒锁,等待单个 GPS 位置,然后停止并再次释放唤醒锁。

这两种方法(永久 WakeLock 与 AlarmManager)的功耗比较如何?如果仅每 30 分钟检查一次,GPS 能否在合理的时间内接收到准确位置?

StackOverflow 上有一些相关问题,但没有一个得到令人满意的答案。一些半有用的:

最佳答案

无论是否连接电源,您都可以使用广播接收器并相应地执行您的操作。

对于电源连接:

public class PowerConnected extends BroadcastReceiver{
   @Override
   public void onReceive(Context context, Intent intent) {
   // TODO Auto-generated method stub
   if(intent.getAction().equalsIgnoreCase("android.intent.action.ACTION_POWER_CONNECTED")){
      //Initialize your listener here...
   }
   }

}

在您的 list 文件中:

<receiver android:name=".receiver.PowerConnected" >
<intent-filter >
     <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
</intent-filter>
</receiver>

当电源断开时:

public class PowerDisconnected extends BroadcastReceiver{
  @Override
  public void onReceive(Context context, Intent intent) {
  if(intent.getAction().equalsIgnoreCase("android.intent.action.ACTION_POWER_DISCONNECTED")){
    //Do your task here...      
  }
 }
}

在您的 list 文件中:

<receiver android:name=".receiver.PowerDisconnected" >
<intent-filter >
   <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
</intent-filter>
</receiver>

现在您应该使用service 并在那里初始化您的GPS。连接电源时使用 GPS_Provider,否则使用 network provider。如果需要,使用 wakelock

关于Android GPS 跟踪和 WakeLock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7765152/

有关Android GPS 跟踪和 WakeLock的更多相关文章

  1. ruby - 如何从 URL 中删除 Google 跟踪参数 (UTM)? - 2

    我有一堆要清理的URL。它们都包含UTM参数,在这种情况下不是必需的,或者是有害的。示例:http://houseofbuttons.tumblr.com/post/22326009438?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+HouseOfButtons+%28House+of+Buttons%29所有可能的参数都以utm_开头。如何使用ruby​​脚本/结构轻松删除它们而不破坏其他潜在的“好”URL参数? 最佳答案 您可以将正则表达式应用于url以清

  2. ruby-on-rails - Rails Asset Pipeline 更好的错误或堆栈跟踪 - 2

    刚刚将应用程序从rails3.0.9升级到3.2.1,当我运行bundleexecrakeassets:precompile时出现错误,这很好,但是回溯没有告诉我在哪里语法问题来self的css或scss文件。我尝试对“0ee5c0e69c92af0”进行greping,但该字符串没有出现在我的项目中。bundleexecrakeassets:precompile:allRAILS_ENV=productionRAILS_GROUPS=assets--trace**Invokeassets:precompile:all(first_time)**Executeassets:precom

  3. ruby - 使用 gmail gem 跟踪一些电子邮件 - 2

    我正在使用gmailgem发送电子邮件,我需要跟踪这些电子邮件。我该怎么做?我正在尝试搜索带有message_id的电子邮件,但它会从我的收件箱中提取所有电子邮件,而我只想要特定电子邮件的回复。这是我的实际代码:*使用message_id保存电子邮件*mail=gmail.deliver(email)Email.create(:message_id=>mail.message_id,:from=>user.email,:to=>annotation.to,:body=>annotation.content,:title=>annotation.title,:annotation=>an

  4. ruby - 如何跟踪 paper_trail 中的自定义事件? - 2

    我正在使用paper_trail进行审计跟踪。除了创建、更新和删除事件外,我还想跟踪一些自定义事件,例如查看(记录)、发送(电子邮件)等。我们如何在审核模型时引入此类自定义事件? 最佳答案 我发现了一个调整,可以在paper_trail管理的Version中添加自定义事件:Version.create(item_type:"Campaign",item_id:campaign.id,event:"Sent")也许这不是正确的解决方案,但它帮助我实现了目标。我想更多地探索paper_trail以找到更好的解决方案。

  5. ruby - 跟踪 Ruby 中的代码? - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭7年前。Improvethisquestion有没有一种运行脚本并查看所有步骤的好方法:执行了哪些代码代码在哪个文件中返回什么错误信息这将是了解开源项目如何运作的好方法。Ruby没有这样的解决方案吗?例如。require"httparty"HTTParty.get"http://www.google.se"然后它会运行代码并向我展示它正在执行的所有代码,其中的文件和行、返回的对象、错误消息等。

  6. ruby-on-rails - 如何让 memprof(在 rails 内)跟踪所有之前的过滤器,然后在转储输出之前进行操作? - 2

    根据Memprofgem文档,为了让Memprof::Middleware与rails一起工作,我们需要将每个请求包装在Memprof.track中。问题是:如何让memprof跟踪所有之前的过滤器,然后在转储输出之前执行操作? 最佳答案 在不了解Memprof的情况下,也不了解您要完成的目标,这是我的最佳猜测。在你的application_controller.rb中:before_filter:do_memprof_stuffdefdo_memprof_stuff#makeitreallysweetend这将在调用其他Contr

  7. ruby - 来自 rails 3 中 therubyracer/v8 的 javascript 错误的堆栈跟踪 - 2

    我正在使用therubyracer和v8在Rails3应用程序中运行一些javascript如果出现任何问题,错误消息将通过通常的Rails3异常通知流程通过电子邮件发送给我。但是,我返回的错误消息非常模糊,堆栈跟踪不会进入javascript文件本身。这是可以理解的,但是很难调试。这是一个例子:V8::JSError:Cannotreadproperty'0'ofundefinedbacktrace:lib/libraryname.rb:32:in`function_that_calls_v8'lib/libraryname.rb:18:in`fetch_and_update'app

  8. ruby - 如何打印 Ruby 1.9 进程的运行时堆栈跟踪? - 2

    有什么方法可以打印Ruby1.9.x进程的运行时堆栈跟踪吗?我知道Ruby1.8有一个名为pstack的实用程序,但该项目似乎在几年前就被放弃了:https://github.com/ice799/pstack.Ruby1.9是否存在类似的东西?非常感谢!编辑:我有兴趣使用外部工具生成堆栈跟踪(不在与Ruby进程相同的内存空间中运行)。正如@mosch所指出的,Kernal#caller方法在正在运行的Ruby进程中运行。您甚至可以构建对捕获进程信号并打印堆栈跟踪的Ruby代码的支持:Signal.trap("SIGTERM"){pcaller}引用:http://www.ruby-d

  9. ruby-on-rails - 在 Ruby/Rails 应用程序中使用 Google Analytics 跟踪 JSON 调用 - 2

    我搜索了很多有关此问题的信息,但找不到任何好的信息。我认为这是一个常见问题:您有一个Web应用程序并在您的平台上构建JSONAPI,因此您可以开发一些小部件、移动应用程序或第三方应用程序。我知道有很多通过API的特定分析服务(例如Mixpanel、Kissmetrics和许多其他服务),但我也想通过GoogleAnalytics跟踪所有JSON调用。我发现最好的方法是使用__utm.gif图像,但奇怪的是我找不到任何插件或gem来使用这个图像。所以我尝试建立自己的方法但没有成功(见下面的代码)......有人可以帮忙吗?defgoogle_analytics_call(page_tit

  10. ruby - 如何在 rake TestTask 失败后抑制巨大的堆栈跟踪? - 2

    我正在为一个项目设置一个rakefile,并且我已经定义了一些rakeTestTasks。我运行了一个简单的健全性测试,该测试执行assert_equal(1,2)只是为了检查输出,除了通常的失败输出之外,我还遇到了这样一团糟:rakeaborted!Commandfailedwithstatus(1):[/usr/bin/ruby-w-I"lib:.""/usr/lib/ruby/...]/usr/lib/ruby/1.9.1/rake.rb:993:in`blockinsh'/usr/lib/ruby/1.9.1/rake.rb:1008:in`call'/usr/lib/ruby

随机推荐