文件传输
FileTransfernterface
属性
isTransmitting
是否在执行传输
transFileType
当前传输中的文件类型
方法
transferFiles(fileItems:cancelPrevTranTask:transProgress:transStatus:completion:)
执行文件传输
- Parameters:
- fileItems: 待传文件
- cancelPrevTranTask: 是否取消执行中的传输任务(如果有)
- transProgress: 文件传输进度
- transStatus: 文件传输状态
- completion: 传输结果,形如:[true, true, ...] 和传入的 fileItems 一一对应
iwfFileSize(filePath:type:completion:)
获取压缩前.iwf文件大小
- Parameters:
- filePath: 表盘文件绝对路径
- type: 表盘类型 1 云表盘 ,2 壁纸表盘
- completion: 文件大小(单位 字节)
registerDeviceTranFileToApp(transTask:)
注册 设备文件->app传输 (全局注册一次)
- Parameters:
- transTask: 接收到的文件任务
unregisterDeviceTranFileToApp()
取消注册 设备文件 -> app传输
示例
实体类:
IDODeviceFileToAppTask (设备文件 -> App)
枚举:
Swift:
var items = [IDOTransBaseModel]()
// 音乐
items.append(IDOTransMusicModel(filePath: "\(mp3Path)/1.mp3", fileName: "mp3_1", musicId: 1))
items.append(IDOTransMusicModel(filePath: "\(mp3Path)/2.mp3", fileName: "mp3_2", musicId: 2))
items.append(IDOTransMusicModel(filePath: "\(mp3Path)/3.mp3", fileName: "mp3_3", musicId: 3))
// 运动图标 - 图片
items.append(IDOTransSportModel(filePath: "x.png", fileName: "icon_sport1", sportType: 2, iconType: 1, isSports: false))
items.append(IDOTransSportModel(filePath: "x.png", fileName: "icon_sport2", sportType: 2, iconType: 1, isSports: false))
// 运动图标 - 动画
items.append(IDOTransSportModel(filePath: "x.bmp", fileName: "icon_sports1", sportType: 2, iconType: 3, isSports: true))
items.append(IDOTransSportModel(filePath: "x.bmp", fileName: "icon_sports2", sportType: 2, iconType: 3, isSports: true))
// 壁纸表盘
items.append(IDOTransNormalModel(fileType: .wallpaperZ, filePath: "x.png", fileName: "wallpaper.z"))
// 云表盘
items.append(IDOTransNormalModel(fileType: .iwfLz, filePath: "noise_w96.zip", fileName: "noise_w96"))
// 固件
items.append(IDOTransNormalModel(fileType: .fw, filePath: "xx.fw", fileName: "xx"))
// 调用传输
let canceler = sdk.transfer.transferFiles(fileItems: items, cancelPrevTranTask: true) { currentIndex, totalCount, _, totalProgress in
print("传输中(\(currentIndex + 1)/\(totalCount)...")
} transStatus: { _, status, errorCode, _ in
if status != .finished || errorCode != 0 {
print("传输失败:\(errorCode)")
}
} completion: { rs in
print("传输结束: \(rs)")
if rs.last! {
// 传输成功
} else {
// 传输失败
}
}
// 取消传输
canceler?.cancel()
// 设备传输文件到app
// 注册监听 设备传输文件到app任务
sdk.transfer.registerDeviceTranFileToApp { [weak self] task in
let txt = "\n\n收到设备传输文件 名称:\(task.deviceTransItem.fileName) 大小:\(task.deviceTransItem.fileSize) 到App"
print(txt)
textResponse.text += "\n\(txt)"
// 接收设备传输文件到app
task.acceptReceiveFile { [weak self] progress in
let s = "接收进度:\(progress * 100)%"
print(s)
self?.textResponse.text += "\n\(s)"
} onComplete: { [weak self] isCompleted, receiveFilePath in
let s = "接收结果:\(isCompleted) filePath:\(receiveFilePath ?? "")"
print(s)
self?.textResponse.text += "\n\(s)"
}
/*
// 注:接收中 可随时终止接收
// 终止接收文件
task.stopReceiveFile { rs in
print("已终止接收文件\(task.deviceTransItem.fileName)")
}
*/
}
// 取消监听
deinit {
sdk.transfer.unregisterDeviceTranFileToApp()
}
Kotlin:
var items = mutableListOf<IDOTransBaseModel>()
// 音乐
items.add(IDOTransMusicModel(filePath: "\(mp3Path)/1.mp3", fileName: "mp3_1", musicId: 1))
items.add(IDOTransMusicModel(filePath: "\(mp3Path)/2.mp3", fileName: "mp3_2", musicId: 2))
items.add(IDOTransMusicModel(filePath: "\(mp3Path)/3.mp3", fileName: "mp3_3", musicId: 3))
// 运动图标 - 图片
items.add(IDOTransSportModel(filePath: "x.png", fileName: "icon_sport1", sportType: 2, iconType: 1, isSports: false))
items.add(IDOTransSportModel(filePath: "x.png", fileName: "icon_sport2", sportType: 2, iconType: 1, isSports: false))
// 运动图标 - 动画
items.add(IDOTransSportModel(filePath: "x.bmp", fileName: "icon_sports1", sportType: 2, iconType: 3, isSports: true))
items.add(IDOTransSportModel(filePath: "x.bmp", fileName: "icon_sports2", sportType: 2, iconType: 3, isSports: true))
// 壁纸表盘
items.add(IDOTransNormalModel(fileType = IDOTransType.WALLPAPERZ,filePath = "xx/xx.png",fileName = "wallpaper.z",fileSize = xx))
// 云表盘
items.add(IDOTransNormalModel(fileType: .iwfLz, filePath: "noise_w96.zip", fileName: "noise_w96"))
// 固件
items.add(IDOTransNormalModel(fileType: .fw, filePath: "xx.fw", fileName: "xx"))
// 调用传输
val cancellable = sdk.transfer.transferFiles(
items, cancelPre,
{ currentIndex, totalCount, currentProgress, totalProgress ->
print("传输中${currentIndex + 1}/$totalCount...")
},
{ currentIndex: Int, status: IDOTransStatus, errorCode: Int?, finishingTime: Int? ->
if (status != IDOTransStatus.FINISHED || errorCode != 0) {
print("传输失败:$errorCode")
}
},
{resultList-> resultList.forEach {
if (it){
//传输成功
}else{
//传输失败
}
}})
// Cancel transfer
canceler?.cancel()
sdk.transfer.registerDeviceTranFileToApp {
println("收到设备传输文件 名称:${task.deviceTransItem.fileName} 大小:${task.deviceTransItem.fileSize} 到App")
it.acceptReceiveFile(onProgress = { progress ->
// Handle progress updates here
println("Progress: $progress")
tv_response?.text ="Progress: $progress"
},
onComplete = { isCompleted, receiveFilePath ->
// Handle completion here
if (isCompleted) {
println("File received successfully at: $receiveFilePath")
tv_response?.text ="File received successfully at: $receiveFilePath"
} else {
tv_response?.text ="File transfer failed."
}
})
/*
// Note: Receiving can be terminated at any time
// Abort receiving file
it.stopReceiveFile { rs ->
println("已终止接收文件${task.deviceTransItem.fileName)")
}
*/
}
// 取消监听
override fun onDestroy() {
super.onDestroy()
sdk.transfer.unregisterDeviceTranFileToApp()
}