//
// WeChatSportVC.swift
// Twear
//
// Created by yangbin on 2021/12/26.
//
import UIKit
import Photos
import MBProgressHUD
import AVFoundation
import Alamofire
class WeChatSportVC: UIViewController {
@IBOutlet weak var QRCodeImageView: UIImageView!
@IBOutlet weak var textView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
title = LocString("微信运动")
QRCodeImageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(saveImage(_:))))
let hud = MBProgressHUD.showAdded(to: QRCodeImageView, animated: true)
hud.bezelView.style = .solidColor
hud.bezelView.backgroundColor = .clear
// MBProgressHUD.showInView("", icon: nil, view: )
var macStr = CurDevice.mac
macStr = macStr.replacingOccurrences(of: ":", with: "", options: .literal, range: nil)
let url = "http://www.hodafone.com.cn/qwear/deviceRegisterQuery.php?device_mac=\(macStr)"
Alamofire.request(url).responseData { responseData in
if let data = responseData.data, let dataStr = String.init(data: data, encoding: .utf8) {
if let left = dataStr.range(of: "http://")?.lowerBound, let right = dataStr.range(of: "
authorize_result")?.lowerBound {
let qrticket = dataStr[left..authorize_result")!.lowerBound]
// dataStr String " \r\n\r\n\r\n\t\r\n\t手表二维码获取\r\n\r\n\r\n\r\n\r\nWelcome to Qwear Sport World!
\r\n\r\nmac = 00E012345755
qrticket = \":{\"errcode\":100020,\"errmsg\":\"account quota not enough\"
authorize_result = device id invalid
\r\n \r\n \r\n "
}
}
let q1 = "\(LocString("绑定微信运动前的准备"))\n\n"
let a1 = LocString("1.解绑设备(苹果手机还需在系统蓝牙中忽略设备)\n2.开启手机蓝牙\n3.确保手表(手环)蓝牙是断开的\n\n")
let q2 = "\(LocString("微信运动的绑定方法"))\n\n"
let a2 = LocString("1.本界面的图片已经存储于手机相册,打开微信'扫一扫'功能\n2.右上角选择'从相册选取二维码'\n3.找到存储于手机中的图片,识别二维码\n4.在弹出的页面中选择”绑定设备”,进入公众号,完成绑定。\n\n")
let q3 = "\(LocString("怎么知道我的设备添加了微信运动?"))\n\n"
let a3 = LocString("关闭APP(苹果手机需要在蓝牙中忽略设备),打开微信运动可以看到设备是连接状态,说明你已经添加了微信运动。\n\n")
let q4 = "\(LocString("怎么删除微信运动?"))\n\n"
let a4 = LocString("打开微信-我-设置-设备-选择设备-删除设备\n\n")
let q5 = "\(LocString("我添加了微信运动,为什么手环(手表)的数据更新不了?"))\n\n"
let a5 = LocString("原因1:如果你微信运动绑定了手机或者其他的设备,微信运动只会显示数据最大的那一个.\n原因2:如果微信运动没有连接上设备,数据也同步不了\n\n")
let q6 = "\(LocString("每次使用微信运动都需要解绑设备或者忽略设备吗?"))\n\n"
let a6 = LocString("1.不需要,只是在第一次添加微信运动的时候需要这样做,这样做是为了释放设备蓝牙,使微信可以搜索到设备。(如果设备已经被手机连上,微信运动是无法搜索到设备的)\n2.绑定微信运动后,APP和微信运动可以同时连接设备,互不影响。")
let string = NSMutableAttributedString(string: q1+a1+q2+a2+q3+a3+q4+a4+q5+a5+q6+a6)
string.addAttributes([.font: RegularFont(17)], range: NSMakeRange(0, q1.count))
string.addAttributes([.font: RegularFont(15)], range: NSMakeRange(q1.count, a1.count))
string.addAttributes([.font: RegularFont(17)], range: NSMakeRange(q1.count+a1.count, q2.count))
string.addAttributes([.font: RegularFont(15)], range: NSMakeRange(q1.count+a1.count+q2.count, a2.count))
string.addAttributes([.font: RegularFont(17)], range: NSMakeRange((q1+a1+q2+a2).count, q3.count))
string.addAttributes([.font: RegularFont(15)], range: NSMakeRange((q1+a1+q2+a2+q3).count, a3.count))
string.addAttributes([.font: RegularFont(17)], range: NSMakeRange((q1+a1+q2+a2+q3+a3).count, q4.count))
string.addAttributes([.font: RegularFont(15)], range: NSMakeRange((q1+a1+q2+a2+q3+a3+q4).count, a4.count))
string.addAttributes([.font: RegularFont(17)], range: NSMakeRange((q1+a1+q2+a2+q3+a3+q4+a4).count, q5.count))
string.addAttributes([.font: RegularFont(15)], range: NSMakeRange((q1+a1+q2+a2+q3+a3+q4+a4+q5).count, a5.count))
string.addAttributes([.font: RegularFont(17)], range: NSMakeRange((q1+a1+q2+a2+q3+a3+q4+a4+q5+a5).count, q6.count))
string.addAttributes([.font: RegularFont(15)], range: NSMakeRange((q1+a1+q2+a2+q3+a3+q4+a4+q5+a5+q6).count, a6.count))
textView.attributedText = string
}
func createQRCode(_ qrticket: String) {
let filter = CIFilter.init(name: "CIQRCodeGenerator")
filter?.setDefaults()
/// Add Data
//链接转换
let data = qrticket.data(using: .utf8)
filter?.setValue(data, forKeyPath: "inputMessage")
/// Out Put
let outputImage = filter?.outputImage
/// Show QRCode
QRCodeImageView.image = createUIImageFromCIImage(image: outputImage!, size: SCREEN_WIDTH)
}
func createUIImageFromCIImage(image: CIImage, size: CGFloat) -> UIImage {
let extent = image.extent.integral
let scale = min(size / extent.width, size / extent.height)
/// Create bitmap
let width: size_t = size_t(extent.width * scale)
let height: size_t = size_t(extent.height * scale)
let cs: CGColorSpace = CGColorSpaceCreateDeviceGray()
let bitmap: CGContext = CGContext(data: nil, width: width, height: height, bitsPerComponent: 8, bytesPerRow: 0, space: cs, bitmapInfo: 1)!
///
let context = CIContext.init()
let bitmapImage = context.createCGImage(image, from: extent)
bitmap.interpolationQuality = .none
bitmap.scaleBy(x: scale, y: scale)
bitmap.draw(bitmapImage!, in: extent)
let scaledImage = bitmap.makeImage()
return UIImage.init(cgImage: scaledImage!)
}
@objc private func saveImage(_ gestureRecognizer: UITapGestureRecognizer) {
if QRCodeImageView.image == nil {
return
}
SystemAuth.authCamera {[weak self] isAuth in
if isAuth {
self?.saveImageToPhoto((self?.QRCodeImageView.image)!)
} else {
self?.showAlert(title: LocString("提示"), message: LocString("请在“设置-隐私-相机”选项中,允许'HDF wear'访问你的相机"), cancelText: nil, confirm: nil)
}
}
// // 判断权限
// switch PHPhotoLibrary.authorizationStatus() {
// case .authorized:
// self.saveImage()
// case .notDetermined:
// PHPhotoLibrary.requestAuthorization { [weak self] (status) in
// if status == .authorized {
// self?.saveImage()
// } else {
// MBProgressHUD.showh(LocString("请在“设置-隐私-照片“选项中,允许'HDF wear'访问你的照片"))
// }
// }
// case .restricted, .denied:
// let alert = UIAlertController(title: LocString("提示"), message: LocString("请在“设置-隐私-照片“选项中,允许'HDF wear'访问你的照片"), preferredStyle: .alert)
// let confirm = UIAlertAction(title: LocString("确定"), style: .default)
// alert.addAction(confirm)
// default:
// break
// }
}
private func saveImageToPhoto(_ image: UIImage) {
PHPhotoLibrary.shared().performChanges({
PHAssetChangeRequest.creationRequestForAsset(from: image)
}, completionHandler: { (isSuccess, error) in
DispatchQueue.main.async {
if isSuccess {// 成功
MBProgressHUD.showh(LocString("已保存到系统相册"))
}
}
})
}
deinit {
print("deinit\(NSStringFromClass(type(of: self)))!!!!!!!")
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
}
*/
}