美文网首页
iOS蓝牙后台运行

iOS蓝牙后台运行

作者: iOS虞 | 来源:发表于2020-12-22 12:33 被阅读0次

我们做的是需要连接蓝牙的App,默认情况下当应用进入后台或挂起时,蓝牙任务将会被终止

开启蓝牙后台模式

在Xcode中配置 TARGET -> Signig & Capabilities -> Capabitity

QQ20201222-115906.png

在搜索框中输入Background Modes 找到后台添加,并勾选Uses Bluetooth LE accessories, Acts as a Bluetooth LE accessory, Background processing

QQ20201222-120345.png

配置已经完成,运行代码后发现连接蓝牙设备切入到后台几秒后并不会断开了,但是后台时蓝牙发送广播应用就会被唤醒大约10s,这个时间对于我们应用来说不能够处理广播的数据

延长后台时间

在蓝牙接收到数据的方法里调用backgroundRun()

// MARK: 蓝牙返回数据
    func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {

        printLog("==========接收到蓝牙返回数据=========")
        let application = UIApplication.shared
        if application.applicationState == .background {
            
            let appdelegate = application.delegate as! AppDelegate
            appdelegate.backgroundRun()
            
        }
        BaseBlueTooth.didUpdateValue?(peripheral, characteristic)
        
    }
//
//  AppDelegate.swift
//  SugarTools
//
//  Created by wujiu on 2020/7/16.
//  Copyright © 2020 yzk. All rights reserved.
//

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    fileprivate var backgroundTask =  UIBackgroundTaskIdentifier.invalid
    
    func applicationWillEnterForeground(_ application: UIApplication) {
        
        backgroundTask = .invalid
        application.endBackgroundTask(backgroundTask)
    }
    
    func backgroundRun() {
        
        let application = UIApplication.shared
        if backgroundTask == .invalid {
           
            let begintime = CFAbsoluteTimeGetCurrent()
            backgroundTask = application.beginBackgroundTask(expirationHandler: {
                
                let endtime = CFAbsoluteTimeGetCurrent()
                printLog("===========后台任务结束了==========时间: \(endtime - begintime)")
                application.endBackgroundTask(self.backgroundTask)
                self.backgroundTask = .invalid
            })
        }
    }
}

开启后大概可以达到31秒,这个时间足够了处理一些数据了,如果蓝牙一直广播数据,这个时间还会更长

这样就可以了,就是不知道能不能上线,还有会不会出现没有测到的问题,发现个问题如果锁屏也会不处理数据,找了好久没有找到怎么改 ,经过反复的测试发现如果在不插电源线的情况下会不处理数据

相关文章

  • iOS 蓝牙后台运行

    在info.plist文件中加入Array类型的Required background modes字段并添加两个元...

  • iOS蓝牙后台运行

    首先,先来大概了解下苹果的后台运行的机制:一般说来,所有程式进入背景后都还有5 秒的执行缓冲时间,有些程序可以要求...

  • ios蓝牙后台运行

    ios蓝牙运行有两种方式: 方式一: 在info.plist文件中加入Array类型的Required backg...

  • iOS蓝牙后台运行

    蓝牙后台运行最近开始做一些关于蓝牙的项目,之前也做过连接蓝牙打印机.做一些简单的打印之类的, 这些网上一搜一大把....

  • iOS蓝牙后台运行

    我们做的是需要连接蓝牙的App,默认情况下当应用进入后台或挂起时,蓝牙任务将会被终止 开启蓝牙后台模式 在Xcod...

  • iOS - 蓝牙后台运行问题

    App在连接蓝牙设备使用时,手机可能会息屏或者手动锁屏了,App进入后台模式,如果没有进行相应处理,App就不会继...

  • 蓝牙后台运行

    设置info.plist 在info.plist文件中设置Required background modes添加A...

  • Paper Collection - Background Ta

    1.IOS后台运行机制详解(一)2.IOS后台运行机制详解(二)3.IOS后台运行 之 后台播放音乐4.转载:IO...

  • iOS 短信验证码倒计时按钮

    级别: ★★☆☆☆标签:「iOS 验证码后台倒计时」「NSTimer后台运行」「iOS 定时器后台运行」作者: ...

  • iOS--iOS app中蓝牙的后台处理

    iOS app中蓝牙的后台处理(Core Bluetooth Background Processing for ...

网友评论

      本文标题:iOS蓝牙后台运行

      本文链接:https://www.haomeiwen.com/subject/byxsnktx.html