对于我当前的项目,我试图找出Android和iOS之间的差异。我只掌握Android知识,完全不了解iOS。 我想知道的是:
是否有类似iOS的Intents?特别是那些表明Wifi / BT连接变化的东西,如android.bluetooth.device.action.ACL_CONNECTED或android.net.wifi.STATE_CHANGE?或者是否有另一种方法可以找出连接更改,即使应用程序没有运行/处于后台模式?
据我了解 IOS background service (like in Android) enable all time& https://developer.apple.com/library/ios/documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html,在iOS中拥有后台服务仅允许用于特定类型的应用。因此,不允许定期询问传感器值(如加速器)的应用程序 - 这是正确的吗?
我非常感谢答案以及关于这些问题的进一步文献!
答案 0 :(得分:1)
您可以使用Reachability的实现来获取有关Wifi连接的通知,但请记住,这些不会唤醒您的应用。
您可以使用Core Bluetooth查找连接事件。再次,这些不会唤醒您的应用程序。我相信你可以设置一个CBCentralManager代表来了解这一点。查看文档here。
但是,你说你还需要解决后台执行问题以保持你的应用程序清醒是正确的。为此,您需要实际使后台执行对用户有用的功能,否则Apple将不会批准您的应用。以下是您的一些选择。
如果您的应用具有实际的蓝牙功能,您可以使用其中一种模式(蓝牙中央和蓝牙外设)。
如果您有保证背景音频的功能,可以使用this
如果您有一个保证背景位置的功能,您可以使用CLLocationManager startUpdatingLocation(但这会耗尽一些严重的电池)
您可能还可以设置一个系统来阻止静默远程通知,然后使用远程通知后台模式。这是为了下载内容
另请注意,用户可以随时基本上禁用所有这些内容。
祝你好运!答案 1 :(得分:0)
我不确定这是否会直接回答您的问题,但可能会有所帮助。我知道在Android中你可以通过Intent切换活动。在iOS中,为了切换到另一个UIViewController
(iOS相当于活动),您将执行segue。在prepareForSegue
方法中,您可以在下一个UIViewController中处理您想要执行的操作,例如传递变量等。
您可以在iOS7中使用Background Fetch
,您可以在应用程序处于睡眠状态/后台时执行服务。这会在后台定期唤醒应用程序以执行任务,如刷新数据等。您可以在此处记录加速度计值。 http://www.appcoda.com/ios7-background-fetch-programming/有一个很好的教程。
我希望这有点帮助。