如何解决WCSession 将文件从 Watch 传输到后台的 iOS
我试图每 15 分钟将文件从手表发送到 iOS。核心运动数据将保存在手表中的文件中,手表每 15 分钟将其发送到 iOS。手表和 iOS 应用程序都在后台。因此,我通过调用 sendMessage 和 replyHandler 来激活 iOS 应用程序,调用 transferFile 将文件发送到 iOS。如果手表在前台它工作正常,当手表在后台发送消息被 iOS 接收但 transferFile 不起作用时。只有当手表应用程序进入前台时,它才会将文件发送到 iOS。
手表端代码
func transferMotionDataFile() {
self.accessQueue.async {
sendFiletoiOSApp
}
}
func sendFiletoiOSApp () {
guard isSessionActive() else {
print("\(#function): Session not activated")
return
}
if (session.isReachable) {
/* Sending log message along with activate message*/
let message = getActivateMessage()
self.session.sendMessage(message,replyHandler: { replyMessage in
let MetaData = [WC_KEY.FILENAME: self.fileSentToServer[0].lastPathComponent]
self.fileTransferSession = self.session.transferFile(self.fileSentToServer[0],Metadata: MetaData)
print ("\(#function): iphone activated,transferring file")
UserDefaults.standard.set(true,forKey: UD_KEY.WATCH_AWAITING_RESP)
},errorHandler: { error in
print ("Error reaching iOS,retrying..")
let err = error as! WCError
if (err.code != WCError.Code.notReachable) { /* wait till reachability status change*/
dispatchQueue.main.async {
self.sendFiletoApp()
}
}
})
}
}
iOS 端代码
func session(_ session: WCSession,didReceiveMessage message: [String : Any],replyHandler: @escaping ([String : Any]) -> Void) {
let msgKey = message[WC_KEY.MESSAGEKEY] as! String
print ("\(#function): for \(msgKey)")
if (msgKey == WC_KEY.ACTIVATE) {
let replyMessage: [String: Any] = [WC_KEY.STATUS: WC_KEY.ACTIVATED]
replyHandler (replyMessage)
}
}
func session(_ session: WCSession,didReceive file: WCSessionFile) {
print ("\(#function): \(file.fileURL.lastPathComponent)")
let destFile = FileUtility.getUrl(file.fileURL)
if (FileUtility.moveFile(from: file.fileURL,to: destFile)) {
print ("\(#function): Move to \(destFile.absoluteString)")
self.accessQueue.async {
//Processing the file
}
}
}
accessQueue 是创建为的串行队列 let accessQueue = dispatchQueue (label: "xxxxxAccessQueue",qos: .default)
我也尝试过使用 dispatch queue main。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。