#include "AppDelegate.h" #include "GeneratedPluginRegistrant.h" #import "GoogleMaps/GoogleMaps.h" @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [GMSServices provideAPIKey:@"AIzaSyAb9JNtW0BEZ_qLeDg87ZhvxSmZply-7hU"]; FlutterViewController* controller = (FlutterViewController*)self.window.rootViewController; FlutterMethodChannel* channel = [FlutterMethodChannel methodChannelWithName:@"make.photo.screen.hibok" binaryMessenger:controller]; [channel setMethodCallHandler:^(FlutterMethodCall* call, FlutterResult result) { if ([@"makePhotoScreen" isEqualToString:call.method]) { UIImage* img = [self makePhotoScreen: controller.view]; NSData *imageData = UIImageJPEGRepresentation(img, 0.8); FlutterStandardTypedData* value = [FlutterStandardTypedData typedDataWithBytes:imageData]; result(value); }else if([@"openMapForOth" isEqualToString:call.method]){ NSDictionary* params = call.arguments; NSString* mapType = params[@"mapType"]; NSArray* latLng = params[@"latLng"]; NSString* address = params[@"address"]; [self openMapForOth:mapType latLng:latLng adress:address]; }else if([@"getListForMap" isEqualToString:call.method]){ NSArray* supportMaps = [self getListForMap]; result(supportMaps); } else { result(FlutterMethodNotImplemented); } }]; // 创建eventChannel 代理方法里处理stream流 delegate设置为self FlutterEventChannel *eventChannel = [FlutterEventChannel eventChannelWithName:@"com.file.hibok" binaryMessenger:controller]; [eventChannel setStreamHandler:self]; [GeneratedPluginRegistrant registerWithRegistry:self]; if(![[NSUserDefaults standardUserDefaults]objectForKey:@"Notification"]){ [[UIApplication sharedApplication] cancelAllLocalNotifications]; [[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"Notification"]; } // Override point for customization after application launch. return [super application:application didFinishLaunchingWithOptions:launchOptions]; } #pragma mark - FlutterStreamHandler - (FlutterError* _Nullable)onListenWithArguments:(id _Nullable)arguments eventSink:(FlutterEventSink)eventSink{ self.eventSink = eventSink; return nil; } - (FlutterError* _Nullable)onCancelWithArguments:(id _Nullable)arguments { return nil; } - (UIImage*)makePhotoScreen:(UIView*)view { CGSize size = view.bounds.size; UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); // CGImageRef imageRef =image.CGImage; // CGRect rect = CGRectMake(CGImageGetWidth(imageRef)/4, CGImageGetHeight(imageRef)/2-CGImageGetWidth(imageRef)/2, CGImageGetWidth(imageRef)/2, CGImageGetWidth(imageRef)/2);//这里可以设置想要截图的区域 // // CGImageRef imageRefRect =CGImageCreateWithImageInRect(imageRef, rect); // // UIImage *sendImage =[[UIImage alloc] initWithCGImage:imageRefRect]; // // return image; } - (NSArray*)getListForMap{ NSMutableArray* maps = [[NSMutableArray alloc] init]; //苹果地图 [maps addObject:@"apple"]; //谷歌地图 if([[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:@"comgooglemaps://"]]) { [maps addObject:@"google"]; } //高德地图 if([[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:@"iosamap://"]]) { [maps addObject:@"minimap"]; } //百度地图 if([[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:@"baidumap://"]]) { [maps addObject:@"baidu"]; } return maps; } -(void) openMapForOth:(NSString *)mapType latLng:(NSArray*)latLng adress:(NSString*)adress { if([mapType isEqualToString:@"baidu"]){ NSString*urlString = [[NSString stringWithFormat:@"baidumap://map/geocoder?location=%@f,%@f&coord_type=gcj02&src=com.cyhd.henhoandroid",latLng.firstObject, latLng.lastObject] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; [[UIApplication sharedApplication] openURL: [NSURL URLWithString:urlString]]; }else if([mapType isEqualToString:@"minimap"]){ NSString*urlString = [[NSString stringWithFormat:@"iosamap://navi?sourceApplication= &lat=%@f&lon=%@f&dev=1",latLng.firstObject, latLng.lastObject] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; [[UIApplication sharedApplication] openURL: [NSURL URLWithString:urlString]]; }else if([mapType isEqualToString:@"apple"]){ NSString*urlString = [[NSString stringWithFormat:@"http://maps.apple.com/?daddr=%@f,%@f",latLng.firstObject, latLng.lastObject] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; [[UIApplication sharedApplication] openURL: [NSURL URLWithString:urlString]]; }else if([mapType isEqualToString:@"google"]){ NSString*urlString = [[NSString stringWithFormat:@"comgooglemaps://?daddr=%@f,%@f",latLng.firstObject, latLng.lastObject] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; [[UIApplication sharedApplication] openURL: [NSURL URLWithString:urlString]]; } } - (void)applicationDidEnterBackground:(UIApplication *)application { self.task = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ [[UIApplication sharedApplication] endBackgroundTask:self.task]; self.task = UIBackgroundTaskInvalid; }]; // __block int count = 0; // [NSTimer scheduledTimerWithTimeInterval:1 repeats:YES block:^(NSTimer * _Nonnull timer) { // // count ++; // NSLog(@"%d",count); // // }]; } //申请后台运行权限 - (void)backGroundSpeech { UIApplication *app = [UIApplication sharedApplication]; __block UIBackgroundTaskIdentifier bgTask; bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ dispatch_async(dispatch_get_main_queue(), ^{ if (bgTask != UIBackgroundTaskInvalid) { bgTask = UIBackgroundTaskInvalid; } }); }]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ dispatch_async(dispatch_get_main_queue(), ^{ if (bgTask != UIBackgroundTaskInvalid) { bgTask = UIBackgroundTaskInvalid; } }); }); } #pragma mark ------------------ 结束后台任务 ------------------ - (void)endBackgroundUpdateask{ [[UIApplication sharedApplication] endBackgroundTask:self.task]; self.task = UIBackgroundTaskInvalid; } - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options { NSLog(@"myurl %@",url.absoluteString); // if (url != nil) { //// 不跟分享插件冲突 // if ([url.absoluteString containsString:@"SharePhotos"]) { // NSLog(@"myurl 存在"); // // } // } if (url != nil && [url.absoluteString containsString:@"file:///private"]) { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths lastObject]; if (url != nil) { NSString *path = [url absoluteString]; path = [path stringByRemovingPercentEncoding]; NSMutableString *string = [[NSMutableString alloc] initWithString:path]; if ([path hasPrefix:@"file:///private"]) { [string replaceOccurrencesOfString:@"file:///private" withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, path.length)]; } NSArray *tempArray = [string componentsSeparatedByString:@"/"]; NSString *fileName = tempArray.lastObject; NSString *sourceName = options[@"UIApplicationOpenURLOptionsSourceApplicationKey"]; NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *filePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@",fileName]]; if ([fileManager fileExistsAtPath:filePath]) { NSLog(@"文件已存在"); self.eventSink(filePath); // [SVProgressHUD showErrorWithStatus:@"文件已存在"]; return YES; } // [MRTools creatFilePathInManager:sourceName]; BOOL isSuccess = [fileManager copyItemAtPath:string toPath:filePath error:nil]; if (isSuccess == YES) { NSLog(@"拷贝成功"); self.eventSink(filePath); // [SVProgressHUD showSuccessWithStatus:@"文件拷贝成功"]; } else { NSLog(@"拷贝失败"); // [SVProgressHUD showErrorWithStatus:@"文件拷贝失败"]; } } }else{ [super application:self openURL:url options:nil]; return YES; } NSLog(@"application:openURL:options:"); return YES; } @end