123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726 |
- //
- // QRCodeScanForChangeDeviceViewController.m
- // 隐私保护
- //
- // Created by APPLE on 2023/9/19.
- //
- #import "QRCodeScanForChangeDeviceViewController.h"
- #import <AVFoundation/AVFoundation.h>
- #import <ImageIO/ImageIO.h>
- #import "RSATool.h"
- #import "connectDeviceManager.h"
- //#import "uploadFileManager.h"
- #import "nasUploadFileManager.h"
- //#import "downloadManager.h"
- #import "nasDownloadFileManager.h"
- #import "backupsFileManager.h"
- #import "nasBackupsManager.h"
- #import <TZImageManager.h>
- #import <TZImagePickerController.h>
- #import "boxDownloadFileManager.h"
- @interface QRCodeScanForChangeDeviceViewController ()<AVCaptureMetadataOutputObjectsDelegate,AVCaptureVideoDataOutputSampleBufferDelegate,UINavigationControllerDelegate,UIImagePickerControllerDelegate,TZImagePickerControllerDelegate>
- @property(nonatomic,strong)AVCaptureVideoPreviewLayer *layer;
- //捕捉会话
- @property(nonatomic,strong)AVCaptureSession *session;
- //辅助区域框
- @property(nonatomic,strong)UIImageView * cyanEdgeImageView;
- @property(nonatomic,strong)UIImageView * qrCodeScanLine;
- @property(nonatomic,strong)NSTimer * scanLineTimer;
- ////打开灯光btn,默认为hidden
- //
- //@property(nonatomic,strong)UIButton * lightBtn;
- //
- ////获取相册图片进行扫描
- //
- //@property(nonatomic,strong)UIButton * photoBtn;
- @end
- @implementation QRCodeScanForChangeDeviceViewController
- - (void)viewDidLoad {
- [super viewDidLoad];
- // Do any additional setup after loading the view.
-
- [self.navigationBar setHidden:YES];
- [self.toolBar setHidden:YES];
-
- AVAuthorizationStatus authStatus =[AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
- //判断摄像头状态是否可用
- if(authStatus==AVAuthorizationStatusAuthorized){
- [self startScan];
- }else{
- NSLog(@"未开启相机权限,请前往设置中开启");
- [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
- dispatch_async(dispatch_get_main_queue(), ^{
- if (granted) {
- // 用户同意授权
- [self startScan];;
- } else {
- // 用户拒绝授权
- [self showPermissionDeniedAlert];
- }
- });
- }];
- }
- }
- - (void)showPermissionDeniedAlert {
-
- NSString * titleStr = NSLocalizedString(@"Camera_permissions_disabled",nil);
- NSString * tipStr = NSLocalizedString(@"Camera_permissions_open_tip",nil);
- UIAlertController *alert = [UIAlertController alertControllerWithTitle:titleStr
- message:tipStr
- preferredStyle:UIAlertControllerStyleAlert];
-
- NSString* cancelStr = NSLocalizedString(@"other_cancel",nil);
- UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:cancelStr style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
-
- [self backBtnPressed];
- }];
-
- NSString*settingStr = NSLocalizedString(@"set_Privacy_button_title",nil);
- UIAlertAction *settingsAction = [UIAlertAction actionWithTitle:settingStr style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
- [self backBtnPressed];
-
- // 跳转到应用设置页面
- NSURL *settingsURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
- if ([[UIApplication sharedApplication] canOpenURL:settingsURL]) {
- [[UIApplication sharedApplication] openURL:settingsURL options:@{} completionHandler:nil];
- }
-
- }];
-
- [alert addAction:cancelAction];
- [alert addAction:settingsAction];
-
- [self presentViewController:alert animated:YES completion:nil];
- }
- -(void)viewWillDisappear:(BOOL)animated
- {
- [super viewWillDisappear:animated];
- if(_scanLineTimer)[_scanLineTimer invalidate];
- }
- - (void)backBtnPressed
- {
- [super backBtnPressed];
-
- if(_isRootVCType){
- //发个通知
- [[NSNotificationCenter defaultCenter] postNotificationName:scanChangeDeviceBackNotification object:nil];
- }
- }
- //开始扫描二维码
- -(void)startScan{
- //1.创建捕捉会话,AVCaptureSession是第一个要被创建的对象,所有的操作都要基于这一个session
- self.session = [[AVCaptureSession alloc]init];
- AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
- AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
- [self.session addInput:input];
- //3.添加输出数据(示例对象-->类对象-->元类对象-->根元类对象)
- /*输入的类是AVCaptureInput,那么输出的类相应的就应该是AVCaptureOutput。
- 输出不需要和设备挂钩,因为一般情况下,我们的输出要么是音频或视频文件,要么是一些其他的数据,像二维码扫描一般是字符串类型。
- 所以创建AVCaptureOutput实例就不需要AVCaptureDevice对象。
- AVCaptureOutput也同样是一个抽象类,同样要使用其子类,在这里我们扫描二维码,
- 使用的是AVCaptureMetadataOutput,设置代码如下所示*/
- AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];
- [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
- //设置能扫描的区域,这里注意,CGRectMake的x,y和width,height的值是互换位置
- output.rectOfInterest=CGRectMake(250/self.view.frame.size.height, 100/self.view.frame.size.width, (self.view.frame.size.width-200)/self.view.frame.size.width, (self.view.frame.size.width-200)/self.view.frame.size.width);
- [self.session addOutput:output];
- //设置输入元数据的类型(类型是二维码,条形码数据,注意,这个一定要写在添加到session后面,不然要崩溃,如果只需要扫描二维码只需要AVMetadataObjectTypeQRCode,如果还需要扫描条形码,那么全部添加上)
- [output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode,
- AVMetadataObjectTypeEAN8Code,
- AVMetadataObjectTypeEAN13Code,
- AVMetadataObjectTypeCode39Code,
- AVMetadataObjectTypeCode39Mod43Code,
- AVMetadataObjectTypeCode93Code,
- AVMetadataObjectTypeCode128Code,
- AVMetadataObjectTypePDF417Code,
- AVMetadataObjectTypeAztecCode,
- AVMetadataObjectTypeUPCECode,
- AVMetadataObjectTypeInterleaved2of5Code,
- AVMetadataObjectTypeITF14Code,
- AVMetadataObjectTypeDataMatrixCode,
- ]];
- //4.添加扫描图层
- self.layer = [AVCaptureVideoPreviewLayer layerWithSession:self.session];
- self.layer.videoGravity=AVLayerVideoGravityResizeAspectFill;
- self.layer.frame = self.view.bounds;
- [self.view.layer addSublayer:self.layer];
- //5.创建view,通过layer层进行设置边框宽度和颜色,用来辅助展示扫描的区域
- _cyanEdgeImageView=[[UIImageView alloc] initWithFrame:CGRectMake(100, 250, self.view.frame.size.width-200, self.view.frame.size.width-200)];
- // _cyanEdgeImageView.layer.borderWidth=2;
- //
- // _cyanEdgeImageView.layer.borderColor =[UIColor cyanColor].CGColor;
- _cyanEdgeImageView.image = [UIImage imageNamed:@"qrCode_scan_bg"];
- [self.view addSubview:_cyanEdgeImageView];
- _qrCodeScanLine=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width-200, 1)];
- _qrCodeScanLine.image = [UIImage imageNamed:@"qrCode_scan_line"];
- [_cyanEdgeImageView addSubview:_qrCodeScanLine];
- _scanLineTimer = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(scanLineDownAndUpFun) userInfo:nil repeats:YES];
-
- UILabel *tipLib = [[UILabel alloc] initWithFrame:CGRectMake(20, _cyanEdgeImageView.hw_max_y + 15, SCREEN_W - 40, 20)];
- tipLib.text = NSLocalizedString(@"guide_qrcoede_tips_please",nil);
- tipLib.font = [UIFont systemFontOfSize:14.0];
- tipLib.textAlignment = NSTextAlignmentCenter;
- tipLib.textColor = [UIColor whiteColor];
- [self.view addSubview:tipLib];
-
- //6.创建检测光感源
- AVCaptureVideoDataOutput *guangOutPut = [[AVCaptureVideoDataOutput alloc] init];
- [guangOutPut setSampleBufferDelegate:self queue:dispatch_get_main_queue()];
- //设置为高质量采集率
- [self.session setSessionPreset:AVCaptureSessionPresetHigh];
- //把光感源添加到会话
- [self.session addOutput:guangOutPut];
- // self.lightBtn=[[UIButton alloc]initWithFrame:CGRectMake(150, cyanView.frame.origin.y+cyanView.frame.size.height+100, self.view.frame.size.width-300, self.view.frame.size.width-300)];
- //
- // self.lightBtn.backgroundColor=[UIColor grayColor];
- //
- // [self.lightBtn addTarget:self action:@selector(lightBtnClick:) forControlEvents:UIControlEventTouchUpInside];
- //
- // [self.view addSubview:self.lightBtn];
- // self.photoBtn=[[UIButton alloc]initWithFrame:CGRectMake(100, self.lightBtn.frame.origin.y+self.lightBtn.frame.size.height+50, self.view.frame.size.width-200, 50)];
-
- //打开相册
- UIButton *openAlbunBut = [[UIButton alloc] init];
- [openAlbunBut setTitle:NSLocalizedString(@"guide_qrcoede_open_album",nil) forState:UIControlStateNormal];
- [openAlbunBut setTitleColor:[UIColor hwColor:@"#3B7FFF" alpha:1.0] forState:UIControlStateNormal];
- openAlbunBut.titleLabel.font = [UIFont systemFontOfSize:14.0];
- [openAlbunBut addTarget:self action:@selector(photoBtnClick:) forControlEvents:UIControlEventTouchUpInside];
- openAlbunBut.backgroundColor = [UIColor hwColor:@"#FFFFFF" alpha:0.2];
- [self.view addSubview:openAlbunBut];
- openAlbunBut.layer.cornerRadius = 24;
- openAlbunBut.layer.masksToBounds = YES;
-
- [openAlbunBut mas_makeConstraints:^(MASConstraintMaker *make) {
- make.width.mas_equalTo(140);
- make.height.mas_equalTo(48);
- make.centerX.mas_equalTo(0);
- make.bottom.mas_equalTo(-80);
- }];
-
- // [self.photoBtn setTitle:@"相册" forState:UIControlStateNormal];
- // [self.photoBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
- // self.photoBtn.backgroundColor=[UIColor orangeColor];
- // [self.photoBtn addTarget:self action:@selector(photoBtnClick:) forControlEvents:UIControlEventTouchUpInside];
- // [self.view addSubview:self.photoBtn];
- //9.开始扫描
- KWeakSelf
- globalBlock(^{
- [weakSelf.session startRunning];
- });
-
- //添加返回键
- CGFloat btn_w_h = 40;
- CGFloat btn_show = 28;
- UIButton *backBtn = [[UIButton alloc] init];
- [self.view addSubview:backBtn];
- [backBtn mas_makeConstraints:^(MASConstraintMaker *make) {
- make.top.mas_equalTo(H_STATE_BAR + (64.f - btn_w_h)/2.f);
- make.left.mas_equalTo(10);
- make.width.mas_equalTo(btn_w_h);
- make.height.mas_equalTo(btn_w_h);
- }];
- [backBtn setImage:[UIImage imageNamed:@"icon_base_back"] forState:(UIControlStateNormal)];
- [backBtn setImageEdgeInsets:(UIEdgeInsetsMake((btn_w_h - btn_show)/2.f, (btn_w_h - btn_show)/2.f, (btn_w_h - btn_show)/2.f, (btn_w_h - btn_show)/2.f))];
- [backBtn addTarget:self
- action:@selector(backBtnPressed)
- forControlEvents:(UIControlEventTouchUpInside)];
- }
- #pragma mark timer 处理线上下移动
- bool isDownType22 = YES;
- -(void)scanLineDownAndUpFun
- {
- [UIView animateWithDuration:0.01 animations:^{
-
- if(isDownType22 && self->_qrCodeScanLine.hw_y <= self->_cyanEdgeImageView.hw_h){
- self->_qrCodeScanLine.hw_y += 2;
-
- if(self->_cyanEdgeImageView.hw_h - self->_qrCodeScanLine.hw_y <= 5){
- isDownType22 = NO;
- }
- }
- else if(!isDownType22 && self->_qrCodeScanLine.hw_y >= 0)
- {
- self->_qrCodeScanLine.hw_y -= 2;
-
- if(self->_qrCodeScanLine.hw_y <= 5){
- isDownType22 = YES;
- }
- }
- }];
- }
- //实现扫描的回调代理方法
- - (void)captureOutput:(AVCaptureOutput*)captureOutput didOutputMetadataObjects:(NSArray*)metadataObjects fromConnection:(AVCaptureConnection*)connection{
- //如果数组metadataObjects中有数据,metadataObjects是个数组类型
- if(metadataObjects.count>0) {
-
- AVMetadataMachineReadableCodeObject*object = [metadataObjects lastObject];
-
- NSLog(@"%@",object.stringValue);
-
- /*扫描到有用信息时取消扫描*/
- NSString *resStr = object.stringValue;//RK3908P1V62112465
- [self handleScanCodeResultFun:resStr];
-
- }else{
- //[[iToast makeText:NSLocalizedString(@"guide_qrcoede_tips_error",nil)] show];
- NSLog(@"没有扫描到数据");
- }
- }
- #pragma mark 处理扫码出来的数据
- - (void)handleScanCodeResultFun:(NSString*)resultStr
- {
-
- //[[uploadFileManager shareInstance] suspendUploadFileFun:YES withModel:nil];
- [[nasUploadFileManager shareInstance] suspendUploadFileFun:YES withModel:nil];
- //[[downloadManager shareInstance] suspendDownloadFileFun:YES withModel:nil];
- [[nasDownloadFileManager shareInstance] suspendDownloadFileFun:YES withModel:nil];
- //[[backupsFileManager shareInstance] suspendBackupsFileFun];
- [[nasBackupsManager shareInstance] suspendBackupsFileFun];
- [[boxDownloadFileManager shareInstance] suspendDownloadFileFun:YES withModel:nil];
-
- NSString *resStr = resultStr;
- if(resStr.length > 22)
- {
- NSString*desStr = [RSATool AES128Decrypt:resStr key:AESCODEKEEYY];
-
- if(desStr){//能解码
- resStr = desStr;
- }
- }
- //Ch0IKJCY9lOgokjfPBFE1cowdC1+tj7ywB2pZgSzjhc=
- //sgl5OzDoVjY5SmGuL50/EnQ4n6Kw+DzRiE1oUjq7yAM=
-
- if (([resStr containsString:@"RK"] && (resStr.length == @"RK3908P1V62112465".length))
- || resStr.length == @"0333933700223250017273".length
- ){
-
- NSDictionary *deviceDict = [HWDataManager getObjectWithKey:Const_Have_Add_Device];
- if (!deviceDict || [[deviceDict allKeys] containsObject:Const_Have_Add_Device_SN]){
- NSString *oldStr = deviceDict[Const_Have_Add_Device_SN];
- if([oldStr isEqualToString:resStr]){
- [[iToast makeText:NSLocalizedString(@"guide_qrcoede_tips_change_same",nil)] show];
-
- //停止扫描
- [self.session stopRunning];
-
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
- [self.session startRunning];
- });
-
- return;
- }
- }
-
-
- //[[iToast makeText:NSLocalizedString(@"guide_qrcoede_tips_ok",nil)] show];
- [_scanLineTimer invalidate];
-
- //停止扫描
- [self.session stopRunning];
-
- //移除扫描层layer
- [self.layer removeFromSuperlayer];
-
- //webrtc方案
- [self getScanSnMsgBy:resStr withDict:deviceDict];
-
- //瑞云方案
- // [self showNewIndicatorHaveStrWithCanBack:NO canTouch:NO showText:NSLocalizedString(@"guide_qrcoede_tips_ok",nil)];
- // [[connectDeviceManager shareInstance] getThridMsgBySN:resStr needReconnect:YES didNetEnd:^(NSInteger didSuc) {
- //
- // [self removeNewIndicatorHaveStr];
- //
- // if([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
- // {
- // [[iToast makeText:NSLocalizedString(@"phone_network_fail_Tips",nil)] show];
- // [self.navigationController popViewControllerAnimated:YES];
- // return;
- // }
- //
- //
- // if(didSuc == 1){
- //
- // //数据埋点
- // [[netWorkManager shareInstance] DataEmbeddingPointBy:2 withEventValue:@"Change_device"];
- //
- // NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithDictionary:deviceDict];
- // [dict setObject:resStr forKey:Const_Have_Add_Device_SN];
- // [HWDataManager setObjectWithKey:Const_Have_Add_Device value:dict];
- //
- // BOOL didSetBackWork = [HWDataManager getBoolWithKey:stringKeyAddSn(Const_file_Transfe_didSet_working_background)];
- // if(!didSetBackWork){
- // [HWDataManager setBoolWithKey:stringKeyAddSn(Const_file_Transfe_didSet_working_background) value:YES];
- // [HWDataManager setBoolWithKey:stringKeyAddSn(Const_file_Transfe_working_background) value:YES];
- // }
- //
- // [webRtcManager shareManager].isChangeBoxType = YES;
- // [[webRtcManager shareManager] closeLinkWebRtcFun];
- //
- // //尝试修复偶现扫码切换云机 已经扫码到 要输新SN密码 但是云机显示是旧SN的 延时一秒跳转
- // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- //
- // //清除原来设置的数据
- // ksharedAppDelegate.isWebSockLinkOKAginType = NO;
- // ksharedAppDelegate.cloudPhoneExtraFileListMod = nil;
- // ksharedAppDelegate.DisabledFileTransferType = NO;
- // ksharedAppDelegate.isImageNewFor130 = NO;
- // ksharedAppDelegate.isNeedShowImageNewType = NO;
- // ksharedAppDelegate.TvStatusMod = nil;
- // ksharedAppDelegate.NASMsgMod = nil;
- // ksharedAppDelegate.isDidShowPwdType = NO;
- // ksharedAppDelegate.isDidShowPwdType = NO;
- // ksharedAppDelegate.NASFileByBoxService = nil;
- // ksharedAppDelegate.NASShareFileService = nil;
- // HLog(@"isWebSockLinkOKAginType NO")
- //
- // [[webRtcManager shareManager] beginToLinkWebRtcFun];
- // [[NSNotificationCenter defaultCenter] postNotificationName:GuideOkNotification object:nil];
- // });
- //
- //
- // }else{
- //
- // [webRtcManager shareManager].isChangeBoxType = NO;
- //
- //// if(didSuc == 2){
- //// [[iToast makeText:NSLocalizedString(@"scan_sn_data_error_tip",nil)] show];
- //// }
- //// else{
- //// [[iToast makeText:NSLocalizedString(@"guide_qrcoede_tips_get_SdnID_fail",nil)] show];
- //// }
- //
- // if(self->_didScanErrorFun){
- // self->_didScanErrorFun(didSuc);
- // }
- // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- // mainBlock(^{
- // [self.navigationController popViewControllerAnimated:YES];
- // });
- // });
- //
- // }
- // }];
- }
- else{
- [[iToast makeText:NSLocalizedString(@"guide_qrcoede_tips_error",nil)] show];
- }
- }
- #pragma mark 根据扫码得到的SN 重新获取信息
- - (void)getScanSnMsgBy:(NSString*)snStr withDict:(NSMutableDictionary*)deviceDict
- {
- if([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
- {
- [[iToast makeText:NSLocalizedString(@"phone_network_fail_Tips",nil)] show];
- [self.navigationController popViewControllerAnimated:YES];
- return;
- }
-
- [self showNewIndicatorHaveStrWithCanBack:NO canTouch:NO showText:NSLocalizedString(@"guide_qrcoede_tips_ok",nil)];
-
- [[netWorkManager shareInstance] getThridMsgBySN:snStr success:^(id _Nonnull responseObject) {
- [self removeNewIndicatorHaveStr];
-
- DeviceThirdIdModel *model = responseObject;
- if([model isKindOfClass:[DeviceThirdIdModel class]]){
-
- if(model.status == 0 && model.data){
- //数据埋点
- [[netWorkManager shareInstance] DataEmbeddingPointBy:2 withEventValue:@"Change_device"];
-
- NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithDictionary:deviceDict];
- [dict setObject:snStr forKey:Const_Have_Add_Device_SN];
- [HWDataManager setObjectWithKey:Const_Have_Add_Device value:dict];
-
- BOOL didSetBackWork = [HWDataManager getBoolWithKey:stringKeyAddSn(Const_file_Transfe_didSet_working_background)];
- if(!didSetBackWork){
- [HWDataManager setBoolWithKey:stringKeyAddSn(Const_file_Transfe_didSet_working_background) value:YES];
- [HWDataManager setBoolWithKey:stringKeyAddSn(Const_file_Transfe_working_background) value:YES];
- }
-
- [webRtcManager shareManager].isChangeBoxType = YES;
- [webRtcManager shareManager].didSendfristMsg = NO;
- [[webRtcManager shareManager] closeLinkWebRtcFun];
-
- //尝试修复偶现扫码切换云机 已经扫码到 要输新SN密码 但是云机显示是旧SN的 延时一秒跳转
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-
- //清除原来设置的数据
- ksharedAppDelegate.isWebSockLinkOKAginType = NO;
- ksharedAppDelegate.cloudPhoneExtraFileListMod = nil;
- ksharedAppDelegate.DisabledFileTransferType = NO;
- ksharedAppDelegate.isImageNewFor130 = NO;
- ksharedAppDelegate.isNeedShowImageNewType = NO;
- ksharedAppDelegate.TvStatusMod = nil;
- ksharedAppDelegate.NASMsgMod = nil;
- ksharedAppDelegate.isDidShowPwdType = NO;
- ksharedAppDelegate.isDidShowPwdType = NO;
- ksharedAppDelegate.NASFileByBoxService = nil;
- ksharedAppDelegate.NASShareFileService = nil;
- ksharedAppDelegate.DeviceWebRtcMsgMod = nil;
- HLog(@"isWebSockLinkOKAginType NO")
-
- [ksharedAppDelegate resetBoxNetUrlFun];
-
- //[[webRtcManager shareManager] beginToLinkWebRtcFun];
- [[NSNotificationCenter defaultCenter] postNotificationName:GuideOkNotification object:nil];
- //改走http方案
- [[NSNotificationCenter defaultCenter] postNotificationName:getExtraFilesDoneNotification object:nil];/*发送通知*/
- });
-
-
- }
- else{
- NSInteger state = 2;
- if (model.status == 201 || model.status == 202) {
- state = model.status;
- }
-
- if(self->_didScanErrorFun){
- self->_didScanErrorFun(state);
- }
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- [self.navigationController popViewControllerAnimated:YES];
- });
- }
- }
- else{
-
- [webRtcManager shareManager].isChangeBoxType = NO;
-
- NSInteger didSuc =2;
- if(model.status == 201 ||model.status == 202){
- didSuc = model.status;
- }
-
- if(self->_didScanErrorFun){
- self->_didScanErrorFun(didSuc);
- }
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- mainBlock(^{
- [self.navigationController popViewControllerAnimated:YES];
- });
- });
-
- }
-
- } failure:^(NSError * _Nonnull error) {
- [self removeNewIndicatorHaveStr];
-
- [webRtcManager shareManager].isChangeBoxType = NO;
-
- NSInteger didSuc = 0;
-
- if(self->_didScanErrorFun){
- self->_didScanErrorFun(didSuc);
- }
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- mainBlock(^{
- [self.navigationController popViewControllerAnimated:YES];
- });
- });
- }];
-
- }
- //光感传感器代理
- -(void)captureOutput:(AVCaptureOutput*)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection*)connection{
- //获取光线的值
- CFDictionaryRef metadataDict = CMCopyDictionaryOfAttachments(NULL,sampleBuffer, kCMAttachmentMode_ShouldPropagate);
- NSDictionary *metadata = [[NSMutableDictionary alloc] initWithDictionary:(__bridge NSDictionary*)metadataDict];
- CFRelease(metadataDict);
- NSDictionary *exifMetadata = [[metadata objectForKey:(NSString *)kCGImagePropertyExifDictionary] mutableCopy];
- float brightnessValue = [[exifMetadata objectForKey:(NSString*)kCGImagePropertyExifBrightnessValue]floatValue];
- NSLog(@"%f",brightnessValue);
- // 根据brightnessValue的值来打开和关闭闪光灯,一般值小于0就需要打开,大于0就关闭
- // if((brightnessValue <0)) {//显示闪光灯
- // self.lightBtn.hidden=NO;
- // }else if((brightnessValue >0)) {//隐藏闪光灯
- // self.lightBtn.hidden=YES;
- // }
- }
- ////闪光灯按钮点击方法
- //
- //-(void)lightBtnClick:(UIButton*)sender{
- // //判断当前设备是否有闪光灯
- //
- // AVCaptureDevice * device=[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
- //
- // BOOL result=[device hasTorch];
- //
- // if(result==YES){
- // if(self.lightBtn.isSelected==NO){
- // self.lightBtn.selected=YES;
- // self.lightBtn.backgroundColor=[UIColor greenColor];
- // [device lockForConfiguration:nil];
- // [device setTorchMode: AVCaptureTorchModeOn];//开
- // [device unlockForConfiguration];
- // }else if(self.lightBtn.isSelected==YES){
- // self.lightBtn.selected=NO;
- // self.lightBtn.backgroundColor=[UIColor grayColor];
- // [device lockForConfiguration:nil];
- // [device setTorchMode: AVCaptureTorchModeOff];//关
- // [device unlockForConfiguration];
- // }
- // }else{
- // NSLog(@"当前设备闪光灯不可用");
- // }
- //}
- //
- ////获取相册图片btn点击方法
- -(void)photoBtnClick:(UIButton*)sender{
- // UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
- // imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
- // // imagePicker.allowsEditing = YES;
- // imagePicker.delegate=self;
- // [self.navigationController presentViewController:imagePicker animated:YES completion:nil];
-
- [self photoClickFun];
- }
- - (void)photoClickFun
- {
- TZImagePickerController *imagePicker = [[TZImagePickerController alloc] initWithMaxImagesCount:1 delegate:self];
- imagePicker.allowPickingVideo=NO;
- //imagePicker.isStatusBarDefault=YES;
- imagePicker.allowTakePicture=NO;
- imagePicker.allowPreview = NO;
- // 4. 照片排列按修改时间升序
- imagePicker.sortAscendingByModificationDate = YES;
- [self presentViewController:imagePicker animated:YES completion:nil];
- }
- - (void)imagePickerController:(TZImagePickerController *)picker didFinishPickingPhotos:(NSArray<UIImage *> *)photos sourceAssets:(NSArray *)assets isSelectOriginalPhoto:(BOOL)isSelectOriginalPhoto
- {
- if(photos && photos.count >= 1){
- [self detectImageFunBy:photos.firstObject];
- }
- else{
- [[iToast makeText:NSLocalizedString(@"guide_qrcoede_tips_error",nil)] show];
- }
- }
- //UIImagePickerControllerDelegate选择图片的回调
- -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<UIImagePickerControllerInfoKey,id> *)info {
- //把UIimage类型转换成CIimage类型
- UIImage *pickedImage = info[UIImagePickerControllerEditedImage] ?: info[UIImagePickerControllerOriginalImage];
-
- [picker dismissViewControllerAnimated:YES completion:^{
-
- }];
-
- [self detectImageFunBy:pickedImage];
- }
- #pragma mark 解析Uiimage
- - (void)detectImageFunBy:(UIImage*)pickedImage
- {
- CIImage*detectImage = [CIImage imageWithData:UIImagePNGRepresentation(pickedImage)];
- //解析扫描二维码结果字符串
- CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{CIDetectorAccuracy: CIDetectorAccuracyLow}];
- //CIQRCodeFeature*feature = (CIQRCodeFeature*)[detector featuresInImage:detectImage options:nil].firstObject;
- NSArray *messageStringArr = (CIQRCodeFeature*)[detector featuresInImage:detectImage options:nil];
-
- //排除掉 http的
- __block NSString *curQRCodeStr = nil;
- for(CIQRCodeFeature*feature in messageStringArr){
-
- if([feature.messageString rangeOfString:@"http"].location == NSNotFound){
- curQRCodeStr = feature.messageString;
- break;
- }
- }
-
- if(curQRCodeStr) {
- NSLog(@"=================二维码结果为%@",curQRCodeStr);
- [self handleScanCodeResultFun:curQRCodeStr];
- }else{
- [[iToast makeText:NSLocalizedString(@"guide_qrcoede_tips_error",nil)] show];
- NSLog(@"没有扫描到数据");
- }
-
- // //停止会话对象扫描
- // [self.session stopRunning];
- // //移除扫描层layer
- // [self.layer removeFromSuperlayer];
-
- }
- @end
|