【问题标题】:Is it possible to detect the user's moving activity on the background?是否可以在后台检测用户的移动活动?
【发布时间】:2017-03-07 10:07:02
【问题描述】:

我想开发一个应用程序来检测用户的移动方式(步行、骑自行车、开车等),并为每种活动类型发送一个特定的UILocalNotification

我的问题是:是否可以在不耗尽设备电池的情况下在后台(当应用程序完全关闭时)检测到它?最好的方法是什么?

谢谢!

【问题讨论】:

  • 这可能对你有帮助:stackoverflow.com/questions/17869659/…
  • @Rahul 它没有说明在后台做什么
  • 您是否在寻找类似 fitbit 的应用配置?
  • @Hasya 你是什么意思? FitBit 有哪些应用配置?
  • Fitbit 是一个应用程序。上网查。

标签: ios objective-c swift algorithm cocoa-touch


【解决方案1】:

iPhone 上 5s 有协处理器 m7​​(+)。 它使您有可能获得设备运动。
只是

import CoreMotion 

在您的文件中。

创建一个CMMotionActivityManager对象:

let motionActivityManager = CMMotionActivityManager()  

检查它是否在您的设备上可用:
motionActivityManager.isActivityAvailable()

使用这个方法:

 motionActivityManager.startActivityUpdates(to: OperationQueue.main) { (activity) in
        if (activity?.automotive)! {
            print("User using car")
        }
        if (activity?.cycling)! {
            print("User is cycling")
        }
        if (activity?.running)! {
            print("User is running")
        }
        if (activity?.walking)! {
            print("User is walking")
        }
        if (activity?.stationary)! {
            print("User is standing")
        }
        if (activity?.unknown)! {
            print("Unknown activity")
        }
    }  

它将返回您的用户活动类型。

【讨论】:

  • 但是它在后台运行良好吗?不会过多地消耗电池?
  • 你可以简单地对这个请求使用延迟,它不会消耗太多的电池。或者将请求与不断变化的地理位置联系起来,这样您就可以在更改地理位置时请求活动类型。
  • 什么意思?你能再解释一下吗?
  • 例如可以保存当前位置,经过10米(或更多)后可以请求活动类型。例如,您可以每 10 米请求一次。您只需要在达到它之后设置值,活动类型将被请求。或者您可以设置计时器和请求活动类型每分钟/10 分钟/小时
  • @MykytaSavchuk@Ravi Ojha:请仔细阅读问题。问题与后台模式有关,您给出的答案不相关。如果您知道如何在后台模式下获得动作并更新您的答案,请告诉我们。谢谢...!!
【解决方案2】:

是的,可以这样做!

如果您的 iOS 应用必须保持监控位置,即使它在 背景,使用标准位置服务并指定位置 UIBackgroundModes 键的值继续在 背景和接收位置更新。 (在这种情况下,你 还应确保位置经理的 pausesLocationUpdatesAutomatically 属性设置为 YES 以帮助 节省电力。)可能需要这种类型的应用程序示例 位置更新是健身或转弯导航应用程序。

阅读更多here

【讨论】:

  • 但是如何在后台获取活动类型(跑步、步行、驾驶等)?
  • 我不是 100% 确定,但请查看 CLActivityType
  • 会耗尽电池电量吗?
  • 是的,但我不知道有多少。可能不多。
  • @FS.O6 那么你最后是怎么做到的呢?
【解决方案3】:

关于可以在后台任务中处理的用户活动如下一次未提及(步行,骑自行车,驾驶等......)

实现长时间运行的后台任务

对于需要更多执行时间来执行的任务,您必须请求特定权限才能在后台运行它们而不会被暂停。在 iOS 中,只允许特定的应用类型在后台运行:

  • 在后台向用户播放有声内容的应用程序, 比如音乐播放器应用
  • 在后台录制音频内容的应用程序。
  • 让用户随时了解其位置的应用程序,例如 一个导航应用程序支持互联网协议语音的应用程序 (网络电话)
  • 需要定期下载和处理新内容的应用
  • 从外部附件接收定期更新的应用

【讨论】:

  • 但是我该怎么做呢?我在哪里可以得到if(userIsWalking) { print("You are walking") } 之类的信息?
  • 如果您使用 VoIP 配置并且您的应用不支持此类功能,那么 Apple 可以拒绝它。
猜你喜欢
  • 1970-01-01
  • 2021-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
  • 2012-02-21
相关资源
最近更新 更多