猎豆优选

NetworkTool.m 5.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. //
  2. // NetworkTool.m
  3. // YouHuiProject
  4. //
  5. // Created by 小花 on 2018/6/13.
  6. // Copyright © 2018年 kuxuan. All rights reserved.
  7. //
  8. #import "NetworkTool.h"
  9. #import <CoreTelephony/CTCellularData.h>
  10. @implementation NetworkTool
  11. /*
  12. CTCellularData在iOS9之前是私有类,权限设置是iOS10开始的,所以App Store审核没有问题
  13. 获取网络权限状态
  14. */
  15. + (void)networkStatus:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  16. //2.根据权限执行相应的交互
  17. if (@available(iOS 9.0, *)) {
  18. CTCellularData *cellularData = [[CTCellularData alloc] init];
  19. /*
  20. 此函数会在网络权限改变时再次调用
  21. */
  22. cellularData.cellularDataRestrictionDidUpdateNotifier = ^(CTCellularDataRestrictedState state) {
  23. switch (state) {
  24. case kCTCellularDataRestricted:
  25. {
  26. NSLog(@"Restricted");
  27. //2.1权限关闭的情况下 再次请求网络数据会弹出设置网络提示
  28. UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"" message:@"检测到您没有启用网络,点击设置按钮进行设置" preferredStyle:UIAlertControllerStyleAlert];
  29. UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:nil];
  30. UIAlertAction *set = [UIAlertAction actionWithTitle:@"设置" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
  31. NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
  32. if([[UIApplication sharedApplication]canOpenURL:url] ) {
  33. if (@available(iOS 10.0, *)) {
  34. [[UIApplication sharedApplication] openURL:url options:@{}completionHandler:^(BOOL success) {
  35. }];
  36. } else {
  37. [[UIApplication sharedApplication]openURL:url];
  38. }
  39. }
  40. }];
  41. [alert addAction:cancel];
  42. [alert addAction:set];
  43. alert.modalPresentationStyle = UIModalPresentationFullScreen;
  44. [[self currentViewController] presentViewController:alert animated:YES completion:nil];
  45. break;
  46. }
  47. case kCTCellularDataNotRestricted:
  48. NSLog(@"NotRestricted");
  49. //2.2已经开启网络权限 监听网络状态
  50. [self addReachabilityManager:application didFinishLaunchingWithOptions:launchOptions];
  51. // [self getInfo_application:application didFinishLaunchingWithOptions:launchOptions];
  52. break;
  53. case kCTCellularDataRestrictedStateUnknown:
  54. NSLog(@"Unknown");
  55. //2.3未知情况 (还没有遇到推测是有网络但是连接不正常的情况下)
  56. break;
  57. default:
  58. break;
  59. }
  60. };
  61. } else {
  62. // Fallback on earlier versions
  63. }
  64. }
  65. /**
  66. 实时检查当前网络状态
  67. */
  68. + (void)addReachabilityManager:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  69. AFNetworkReachabilityManager *afNetworkReachabilityManager = [AFNetworkReachabilityManager sharedManager];
  70. //这个可以放在需要侦听的页面
  71. // [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(afNetworkStatusChanged:) name:AFNetworkingReachabilityDidChangeNotification object:nil];
  72. [afNetworkReachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
  73. switch (status) {
  74. case AFNetworkReachabilityStatusNotReachable:{
  75. NSLog(@"网络不通:%@",@(status) );
  76. break;
  77. }
  78. case AFNetworkReachabilityStatusReachableViaWiFi:{
  79. NSLog(@"网络通过WIFI连接:%@",@(status));
  80. break;
  81. }
  82. case AFNetworkReachabilityStatusReachableViaWWAN:{
  83. NSLog(@"网络通过无线连接:%@",@(status) );
  84. break;
  85. }
  86. default:
  87. break;
  88. }
  89. }];
  90. [afNetworkReachabilityManager startMonitoring]; //开启网络监视器;
  91. }
  92. + (int)checkNetWorkPermission
  93. {
  94. if (@available(iOS 9.0, *)) {
  95. CTCellularData *cellularData = [[CTCellularData alloc]init];
  96. CTCellularDataRestrictedState state = cellularData.restrictedState;
  97. return state;
  98. } else {
  99. return -1;
  100. }
  101. }
  102. + (UIViewController *)currentViewController{
  103. UIViewController * currVC = nil;
  104. UIWindow *window = [UIApplication sharedApplication].delegate.window;
  105. UIViewController * Rootvc = window.rootViewController;
  106. do {
  107. if ([Rootvc isKindOfClass:[UINavigationController class]]) {
  108. UINavigationController * nav = (UINavigationController *)Rootvc;
  109. UIViewController * v = [nav.viewControllers lastObject];
  110. currVC = v;
  111. Rootvc = v.presentedViewController;
  112. continue;
  113. }else if([Rootvc isKindOfClass:[UITabBarController class]]){
  114. UITabBarController * tabVC = (UITabBarController *)Rootvc;
  115. currVC = tabVC;
  116. Rootvc = [tabVC.viewControllers objectAtIndex:tabVC.selectedIndex];
  117. continue;
  118. }
  119. } while (Rootvc!=nil);
  120. return currVC;
  121. }
  122. @end