// // ViewController.m // XYSW // // Created by Jim on 2021/9/7. // #import "ViewController.h" #import "YHScanQRCodeVC.h" #import "TZImagePickerManager.h" #import "WeDocument.h" #import "AppDelegate.h" #import "AFNetworking.h" #import "LCDownloadManager.h" #import <QuickLook/QuickLook.h> #import <WebKit/WebKit.h> #import <CoreLocation/CoreLocation.h> @interface ViewController ()<UIDocumentPickerDelegate,QLPreviewControllerDataSource,QLPreviewControllerDelegate,CLLocationManagerDelegate> @property (nonatomic , strong) UIImageView *pickerImageV; @property (nonatomic, strong) AFHTTPRequestOperation *operation; @property (nonatomic, strong) NSString *fileSvPath; @property (nonatomic, strong) WKWebView *webView; @property (nonatomic, strong) CLLocationManager *locationManager; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; UIButton *scanBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [scanBtn setTitle:@"扫一扫" forState:UIControlStateNormal]; [scanBtn setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal]; scanBtn.frame = CGRectMake(150, KNavHeight+40, 80, 25); scanBtn.backgroundColor = [UIColor blueColor]; [scanBtn addTarget:self action:@selector(goToScanVC) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:scanBtn]; _pickerImageV = [[UIImageView alloc] init]; [self.view addSubview:_pickerImageV]; [_pickerImageV mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.mas_equalTo(-34); make.centerX.mas_equalTo(self.view); make.height.mas_equalTo(150); make.width.mas_equalTo(KScreenWidth); }]; UIButton *scanBtn1 = [UIButton buttonWithType:UIButtonTypeCustom]; scanBtn1.backgroundColor = [UIColor blueColor]; [scanBtn1 setTitle:@"拍照" forState:UIControlStateNormal]; [scanBtn1 setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal]; scanBtn1.frame = CGRectMake(20, KNavHeight+40, 80, 25); [scanBtn1 addTarget:self action:@selector(goToCameraComplain) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:scanBtn1]; UIButton *scanBtn2 = [UIButton buttonWithType:UIButtonTypeCustom]; [scanBtn2 setTitle:@"相册" forState:UIControlStateNormal]; scanBtn2.backgroundColor = [UIColor blueColor]; [scanBtn2 setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal]; scanBtn2.frame = CGRectMake(260, KNavHeight+40, 80, 25); [scanBtn2 addTarget:self action:@selector(goToPickerImageComplain) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:scanBtn2]; UIButton *scanBtn3 = [UIButton buttonWithType:UIButtonTypeCustom]; [scanBtn3 setTitle:@"文件上传" forState:UIControlStateNormal]; scanBtn3.backgroundColor = [UIColor blueColor]; [scanBtn3 setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal]; scanBtn3.frame = CGRectMake(150, KNavHeight+100, 80, 25); [scanBtn3 addTarget:self action:@selector(goToopenFileData) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:scanBtn3]; UIButton *scanBtn4 = [UIButton buttonWithType:UIButtonTypeCustom]; [scanBtn4 setTitle:@"退出登录" forState:UIControlStateNormal]; scanBtn4.backgroundColor = [UIColor blueColor]; [scanBtn4 setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal]; scanBtn4.frame = CGRectMake(150, KNavHeight+140, 80, 25); [scanBtn4 addTarget:self action:@selector(goToLoginViewControll) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:scanBtn4]; UIButton *scanBtn5 = [UIButton buttonWithType:UIButtonTypeCustom]; [scanBtn5 setTitle:@"文件下载" forState:UIControlStateNormal]; scanBtn5.backgroundColor = [UIColor blueColor]; [scanBtn5 setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal]; scanBtn5.frame = CGRectMake(150, KNavHeight+180, 80, 25); [scanBtn5 addTarget:self action:@selector(goToDownFile) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:scanBtn5]; UIButton *scanBtn6 = [UIButton buttonWithType:UIButtonTypeCustom]; [scanBtn6 setTitle:@"获取定位" forState:UIControlStateNormal]; scanBtn6.backgroundColor = [UIColor blueColor]; [scanBtn6 setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal]; scanBtn6.frame = CGRectMake(150, KNavHeight+220, 80, 25); [scanBtn6 addTarget:self action:@selector(getLocation) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:scanBtn6]; } -(void)getLocation{ [self startLocation]; } -(BOOL)getLocatoinAuth { BOOL isAuthNotDeteermined = [CLLocationManager authorizationStatus]==kCLAuthorizationStatusNotDetermined; BOOL isAuthNo = [CLLocationManager authorizationStatus]==kCLAuthorizationStatusDenied || [CLLocationManager authorizationStatus]==kCLAuthorizationStatusRestricted; if ([CLLocationManager locationServicesEnabled] && isAuthNotDeteermined) { CLLocationManager *locationManager = [[CLLocationManager alloc] init]; [locationManager requestAlwaysAuthorization]; return NO; } else if ([CLLocationManager locationServicesEnabled] && isAuthNo) { NSString *title=[NSString stringWithFormat:@"您尚未允许定位服务!\n请到手机[设置]->[隐私]->[定位服务]中打开定位服务,并允许香信使用定位服务。"]; UIAlertController *alertCtrl = [UIAlertController alertControllerWithTitle:title message:nil preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"sure_simple",@"确定") style:UIAlertActionStyleCancel handler:nil]; [alertCtrl addAction:cancelAction]; [self presentViewController:alertCtrl animated:YES completion:nil]; return NO; } return YES; } //开始定位 - (void)startLocation { if ([CLLocationManager locationServicesEnabled]) { // CLog(@"--------开始定位"); self.locationManager = [[CLLocationManager alloc]init]; self.locationManager.delegate = self; //控制定位精度,越高耗电量越 self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; // 总是授权 [self.locationManager requestAlwaysAuthorization]; self.locationManager.distanceFilter = 10.0f; [self.locationManager requestAlwaysAuthorization]; [self.locationManager startUpdatingLocation]; } } - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { if ([error code] == kCLErrorDenied) { NSLog(@"访问被拒绝"); } if ([error code] == kCLErrorLocationUnknown) { NSLog(@"无法获取位置信息"); } } //定位代理经纬度回调 - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations { CLLocation *newLocation = locations[0]; NSString *lat = [NSString stringWithFormat:@"%.4f",newLocation.coordinate.latitude]; NSString *lon = [NSString stringWithFormat:@"%.4f",newLocation.coordinate.longitude]; NSString *alerStr = [NSString stringWithFormat:@"你好,你的经纬度信息为 : 纬度:%@ 经度:%@",lat,lon]; UIAlertController *actionSheet = [UIAlertController alertControllerWithTitle:@"提示" message:alerStr preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *cancleAction = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { }]; [actionSheet addAction:cancleAction]; [self presentViewController:actionSheet animated:YES completion:nil]; // 获取当前所在的城市名 CLGeocoder *geocoder = [[CLGeocoder alloc] init]; //根据经纬度反向地理编译出地址信息 [geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *array, NSError *error){ if (array.count > 0){ CLPlacemark *placemark = [array objectAtIndex:0]; //获取城市 NSString *city = placemark.locality; if (!city) { //四大直辖市的城市信息无法通过locality获得,只能通过获取省份的方法来获得(如果city为空,则可知为直辖市) city = placemark.administrativeArea; } NSLog(@"city = %@", city); // [self httpGetWeather:city]; } else if (error == nil && [array count] == 0) { NSLog(@"No results were returned."); } else if (error != nil) { NSLog(@"An error occurred = %@", error); } }]; //系统会一直更新数据,直到选择停止更新,因为我们只需要获得一次经纬度即可,所以获取之后就停止更新 [manager stopUpdatingLocation]; } -(void)goToDownFile{ [self.view makeToast:@"没有文件路径"]; //NSString *fileUrl=[body.url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; // 下载路径 NSString *fileUrl = @""; // 缓存路径 long timeStamp = (long)([[NSDate date] timeIntervalSince1970]*1000); NSString* fileCachePath=[NSString stringWithFormat:@"%ld%@",timeStamp,@"fileName"]; // 本地路径 NSString *cacgeFileUrl = [NSString stringWithFormat:@"/%@/file/%@",@"kUid",fileCachePath]; __weak typeof(self) weakSelf = self; [self.operation cancel]; self.operation = [LCDownloadManager downloadFileWithURLString:fileUrl fileName:@"fileNamefileCachePath" cachePath: fileCachePath progress:^(CGFloat progress, CGFloat totalMBRead, CGFloat totalMBExpectedToRead) { // 正在下载 } success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { // 下载成功 // 打开文件 预览 NSString* fileUrl=[NSString stringWithFormat:@"%@%@",[[self class] XH_getDocumentDir],cacgeFileUrl]; if (fileUrl) { weakSelf.fileSvPath = fileUrl; QLPreviewController *preViewCon = [QLPreviewController new]; preViewCon.dataSource = weakSelf; [preViewCon setDelegate:weakSelf]; [weakSelf presentViewController:preViewCon animated:YES completion:nil]; } } failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) { //下载失败 }]; } -(void)goToScanVC{ [Untis judgeIsHaveCamerCompleteBlock:^(BOOL granted) { if (granted) { dispatch_async(dispatch_get_main_queue(), ^{ YHScanQRCodeVC *vc = [[YHScanQRCodeVC alloc] init]; [[AppDelegate shareAppDelegate].navigationCtrl pushViewController:vc animated:YES]; }); }else{ dispatch_async(dispatch_get_main_queue(), ^{ UIAlertController *actionSheet = [UIAlertController alertControllerWithTitle:@"温馨提示" message:@"“APP”没有获得照相机的使用权限,请在设置中开启「照相机」" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]; }]; UIAlertAction *cancleAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { }]; [actionSheet addAction:action1]; [actionSheet addAction:cancleAction]; [self presentViewController:actionSheet animated:YES completion:nil]; }); } }]; } -(void)goToCameraComplain{ [Untis judgeIsHaveCamerCompleteBlock:^(BOOL granted) { if (granted) { dispatch_async(dispatch_get_main_queue(), ^{ [[TZImagePickerManager shareManager] pushCameraViewController:self complete:^(UIImage * _Nonnull cameraImage) { if (cameraImage) { [self setPickerViewImage:cameraImage]; } }]; }); }else{ dispatch_async(dispatch_get_main_queue(), ^{ UIAlertController *actionSheet = [UIAlertController alertControllerWithTitle:@"温馨提示" message:@"“APP”没有获得照相机的使用权限,请在设置中开启「照相机」" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]; }]; UIAlertAction *cancleAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { }]; [actionSheet addAction:action1]; [actionSheet addAction:cancleAction]; [self presentViewController:actionSheet animated:YES completion:nil]; }); } }]; } -(void)goToPickerImageComplain{ [Untis judgeIsHaveAlbumCompleteBlock:^(BOOL granted) { if (granted) { [[TZImagePickerManager shareManager] pushPickerViewController:PickerViewControllerTypeOfImageDefault fromViewController:self selectImageNumber:1 complete:^(NSArray<UIImage *> * _Nonnull photos, NSArray * _Nonnull assets, BOOL isSelectOriginalPhoto) { if (photos.count) { UIImage *image = [photos firstObject]; [self setPickerViewImage:image]; } }]; }else{ dispatch_async(dispatch_get_main_queue(), ^{ UIAlertController *actionSheet = [UIAlertController alertControllerWithTitle:@"温馨提示" message:@"“APP”没有获得相册的使用权限,请在设置中开启「相册」" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]; }]; UIAlertAction *cancleAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { }]; [actionSheet addAction:action1]; [actionSheet addAction:cancleAction]; [self presentViewController:actionSheet animated:YES completion:nil]; }); } }]; } -(void)goToLoginViewControll{ [[NSUserDefaults standardUserDefaults] setObject:@"0" forKey:@"login"]; [[NSUserDefaults standardUserDefaults] synchronize]; [AppDelegate startLoginViewController]; } -(void)goToopenFileData{ NSArray *documentTypes = @[@"public.content", @"public.text", @"public.source-code", @"public.image", @"public.jpeg", @"public.png", @"com.adobe.pdf", @"com.apple.keynote.key", @"com.microsoft.word.doc", @"com.microsoft.excel.xls", @"com.microsoft.powerpoint.ppt"]; UIDocumentPickerViewController *picker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:documentTypes inMode:UIDocumentPickerModeOpen]; picker.delegate = self; [self presentViewController:picker animated:YES completion:nil]; } #pragma mark - UIDocumentPickerDelegate - (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentsAtURLs:(NSArray <NSURL *>*)urls { for (int i=0; i<urls.count; i++) { [self openFileData:urls[i]]; } } - (void)documentPickerWasCancelled:(UIDocumentPickerViewController *)controller { [controller dismissViewControllerAnimated:YES completion:nil]; } - (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url { DLog(@"%@",url); } -(void)openFileData:(NSURL*)url{ WeDocument *document = [[WeDocument alloc] initWithFileURL:url]; __weak typeof(self) weakSelf = self; [document openWithCompletionHandler:^(BOOL success) { if (success) { DLog(@"文件名%@",document.docFileName); DLog(@"文件类型%@",document.docMIMEType); DLog(@"文件长度%lu",(unsigned long)document.docLength); DLog(@"文件资源%@",document.documentData); dispatch_queue_t queue = dispatch_queue_create("my_concurrent_queue", DISPATCH_QUEUE_CONCURRENT); dispatch_async(queue, ^{ // 文件上传 }); } else { DLog(@"读取失败"); } [document closeWithCompletionHandler:^(BOOL success) { }]; }]; } #pragma mark --- QLPreviewControllerDelegate - (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller { return 1; } - (id <QLPreviewItem>)previewController: (QLPreviewController *)controller previewItemAtIndex:(NSInteger)index { return [NSURL fileURLWithPath:self.fileSvPath]; } - (void)previewControllerDidDismiss:(QLPreviewController *)controller { } -(void)setPickerViewImage:(UIImage *)image{ self.pickerImageV.image = image; } //数据路径 + (NSString *)XH_getDocumentDir{ return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; } @end