问题描述
我试图每 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 (将#修改为@)