WeChatSportVC.swift 8.78 KB
//
//  WeChatSportVC.swift
//  Twear
//
//  Created by yangbin on 2021/12/26.
//

import UIKit
import Photos
import MBProgressHUD
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: "<br>authorize_result")?.lowerBound {
                    let qrticket = dataStr[left..<right]
                    self.createQRCode(String(qrticket))
                    hud.hide(animated: true)
                    print(qrticket)
                }
//                let qrticket = dataStr[dataStr.range(of: "http://")!.lowerBound..<dataStr.range(of: "<br>authorize_result")!.lowerBound]
//                dataStr    String    "<!DOCTYPE html> \r\n<html>\r\n<head>\r\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\r\n\t<title>手表二维码获取</title>\r\n</head>\r\n\r\n<body>\r\n\r\n<h1>Welcome to Qwear Sport World!</h1> \r\n\r\nmac = 00E012345755<br>qrticket = \":{\"errcode\":100020,\"errmsg\":\"account quota not enough\"<br>authorize_result = device id invalid<br> \r\n \r\n</body> \r\n</html> "
               
            }
        }
        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
        }
        // 判断权限
        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 saveImage() {
        //UIImageView.image must be used from main thread only
        DispatchQueue.main.async {
            if let image = self.QRCodeImageView.image {
                PHPhotoLibrary.shared().performChanges({
                    PHAssetChangeRequest.creationRequestForAsset(from: image)
                }, completionHandler: { (isSuccess, error) in
                    if isSuccess {// 成功
                        MBProgressHUD.showh("已保存到系统相册")
                    }
                })
            }
        }
    }
    
    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.
     }
     */
    
}