在 iOS 的后台模式下将数据从 Central 传输到外围设备

Posted

技术标签:

【中文标题】在 iOS 的后台模式下将数据从 Central 传输到外围设备【英文标题】:Transferring Data from Central to peripheral in Background mode in iOS 【发布时间】:2015-02-26 10:51:37 【问题描述】:

我正在开发一个通过 BLE 进行自定义可穿戴通信的应用程序。

我已经订阅了蓝牙中心的 info.plist 文件中的 UI 后台模式。 我通过划分为每个 200 字节的块大小来传输大约 600 kb 的固件文件。该过程进展顺利,但当我按下主页按钮时,应用程序进入后台状态,因此在 1-2 分钟后终止该过程。

如果我的屏幕在一定时间后变暗,则固件传输会继续,但只要按下主页按钮,应用程序就会在几分钟后停止传输数据。

请帮助我摆脱这种情况。

谢谢。

【问题讨论】:

【参考方案1】:

要在后台模式下运行任务,您需要按照以下步骤操作。

第 1 步:将 __block UIBackgroundTaskIdentifier bgTask 声明为全局变量。

第 2 步:在applicationDidEnterBackground 中添加以下代码。

- (void)applicationDidEnterBackground:(UIApplication *)application 

    bgTask = [application beginBackgroundTaskWithExpirationHandler:^
    bgTask = UIBackgroundTaskInvalid;
];


第 3 步:一旦应用进入前台模式,就停止后台任务处理程序。

- (void)applicationWillEnterForeground:(UIApplication *)application 
      // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.

      [[UIApplication sharedApplication] endBackgroundTask:bgTask];


【讨论】:

谢谢老兄!!!我认为它现在正在工作。我会接受你的回答,但需要进行更多测试。

以上是关于在 iOS 的后台模式下将数据从 Central 传输到外围设备的主要内容,如果未能解决你的问题,请参考以下文章

在 xamarin.ios bluetooth-central 中不能正常运行

sh 在后台模式下将Bash放入正在运行的容器中。

iOS 在后台模式下从广告中省略制造商数据

如何在不从当前活动选项卡中获取焦点的情况下将子窗口添加到 QMdiArea(设置为 TAB 模式)?

在 iOS 7 中运行的应用程序在后台被杀死

从后台服务启动应用程序