iOS开发中如何检测是否开启定位、是否允许消息推送等权限-创新互联

这篇文章主要介绍了iOS开发中如何检测是否开启定位、是否允许消息推送等权限,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

成都创新互联公司作为成都网站建设公司,专注成都网站建设公司、网站设计,有关企业网站设计方案、改版、费用等问题,行业涉及三维植被网等多个领域,已为上千家企业服务,得到了客户的尊重与认可。

1.iOS开发检测是否开启定位:

需要导入:

#import 

代码如下:

+ (void)openLocationServiceWithBlock:(ReturnBlock)returnBlock 
{ 
  BOOL isOPen = NO; 
  if ([CLLocationManager locationServicesEnabled] && [CLLocationManager authorizationStatus] != kCLAuthorizationStatusDenied) { 
    isOPen = YES; 
  } 
  if (returnBlock) { 
    returnBlock(isOpen); 
  } 
}

2.iOS开发检测是否允许消息推送:

需要导入:

#import 

代码如下:

+ (void)openMessageNotificationServiceWithBlock:(ReturnBlock)returnBlock 
{ 
 BOOL isOpen = NO; 
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0 
 UIUserNotificationSettings *setting = [[UIApplication sharedApplication] currentUserNotificationSettings]; 
 if (setting.types != UIUserNotificationTypeNone) { 
  isOpen = YES; 
 } 
#else 
 UIRemoteNotificationType type = [[UIApplication sharedApplication] enabledRemoteNotificationTypes]; 
 if (type != UIRemoteNotificationTypeNone) { 
  isOpen = YES; 
 } 
#endif 
 if (returnBlock) { 
  returnBlock(isOpen); 
 } 
}
+ (void)openMessageNotificationServiceWithBlock:(ReturnBlock)returnBlock 
{ 
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 
 [[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings *settings) { 
  if (returnBlock) { 
   returnBlock(settings.authorizationStatus == UNAuthorizationStatusAuthorized); 
  } 
 }]; 
#elif __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0 
 returnBlock([[UIApplication sharedApplication] isRegisteredForRemoteNotifications]); 
#else 
 UIRemoteNotificationType type = [[UIApplication sharedApplication] enabledRemoteNotificationTypes]; 
 if (returnBlock) { 
  returnBlock(type != UIRemoteNotificationTypeNone); 
 } 
#endif 
}

3.iOS开发检测是否开启摄像头:

需要导入:

#import 

代码如下:

+ (void)openCaptureDeviceServiceWithBlock:(ReturnBlock)returnBlock 
{ 
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_7_0 
  AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]; 
  if (authStatus == AVAuthorizationStatusNotDetermined) { 
    [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) { 
      if (returnBlock) { 
        returnBlock(granted); 
      } 
    }]; 
    return NO; 
  } else if (authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied) { 
    returnBlock(NO); 
  } else { 
    returnBlock(YES); 
  } 
#endif 
}

4.iOS开发检测是否开启相册:

需要导入:

#import #import 

代码如下:

+ (void)openAlbumServiceWithBlock:(ReturnBlock)returnBlock 
{ 
  BOOL isOpen; 
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0 
  PHAuthorizationStatus authStatus = [PHPhotoLibrary authorizationStatus]; 
  isOpen = YES; 
  if (authStatus == PHAuthorizationStatusRestricted || authStatus == PHAuthorizationStatusDenied) { 
    isOpen = NO; 
  } 
#else 
  ALAuthorizationStatus author = [ALAssetsLibrary authorizationStatus]; 
  isOpen = YES; 
  if (author == ALAuthorizationStatusRestricted || author == ALAuthorizationStatusDenied) { 
    isOpen = NO; 
  } 
#endif 
  if (returnBlock) { 
    returnBlock(isOpen); 
  } 
}

5.iOS开发检测是否开启麦克风:

需要导入:

#import 

代码如下:

+ (void)openRecordServiceWithBlock:(ReturnBlock)returnBlock 
{ 
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0 
  AVAudioSessionRecordPermission permissionStatus = [[AVAudioSession sharedInstance] recordPermission]; 
  if (permissionStatus == AVAudioSessionRecordPermissionUndetermined) { 
    [[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) { 
      if (returnBlock) { 
        returnBlock(granted); 
      } 
    }]; 
  } else if (permissionStatus == AVAudioSessionRecordPermissionDenied) { 
    returnBlock(NO); 
  } else { 
    returnBlock(YES); 
  } 
#endif 
}

6.iOS开发检测是否开启通讯录:

需要导入:

#import #import 

代码如下:

+ (void)openContactsServiceWithBolck:(ReturnBlock)returnBolck
{
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0
 CNAuthorizationStatus cnAuthStatus = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];
 if (cnAuthStatus == CNAuthorizationStatusNotDetermined) {
  CNContactStore *store = [[CNContactStore alloc] init];
  [store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError *error) {
   if (returnBolck) {
    returnBolck(granted);
   }
  }];
 } else if (cnAuthStatus == CNAuthorizationStatusRestricted || cnAuthStatus == CNAuthorizationStatusDenied) {
  if (returnBolck) {
   returnBolck(NO);
  }
 } else {
  if (returnBolck) {
   returnBolck(YES);
  }
 }
#else
 //ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
 ABAddressBookRef addressBook = ABAddressBookCreate();
 ABAuthorizationStatus authStatus = ABAddressBookGetAuthorizationStatus();
 if (authStatus != kABAuthorizationStatusAuthorized) {
  ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
   dispatch_async(dispatch_get_main_queue(), ^{
    if (error) {
     NSLog(@"Error: %@", (__bridge NSError *)error);
     if (returnBolck) {
      returnBolck(NO);
     }
    } else {
     if (returnBolck) {
      returnBolck(YES);
     }
    }
   });
  });
 } else {
  if (returnBolck) {
   returnBolck(YES);
  }
 }
#endif
}

7.iOS开发检测是否开启蓝牙:

需要导入:

#import 

代码如下:

+ (void)openPeripheralServiceWithBolck:(ReturnBlock)returnBolck 
{ 
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_7_0 
  CBPeripheralManagerAuthorizationStatus cbAuthStatus = [CBPeripheralManager authorizationStatus]; 
  if (cbAuthStatus == CBPeripheralManagerAuthorizationStatusNotDetermined) { 
    if (returnBolck) { 
      returnBolck(NO); 
    } 
  } else if (cbAuthStatus == CBPeripheralManagerAuthorizationStatusRestricted || cbAuthStatus == CBPeripheralManagerAuthorizationStatusDenied) { 
    if (returnBolck) { 
      returnBolck(NO); 
    } 
  } else { 
    if (returnBolck) { 
      returnBolck(YES); 
    } 
  } 
#endif 
}

8.iOS开发检测是否开启日历/备忘录:

需要导入:

#import 

代码如下:

+ (void)openEventServiceWithBolck:(ReturnBlock)returnBolck withType:(EKEntityType)entityType 
{ 
  // EKEntityTypeEvent  代表日历 
  // EKEntityTypeReminder 代表备忘 
  EKAuthorizationStatus ekAuthStatus = [EKEventStore authorizationStatusForEntityType:entityType]; 
  if (ekAuthStatus == EKAuthorizationStatusNotDetermined) { 
    EKEventStore *store = [[EKEventStore alloc] init]; 
    [store requestAccessToEntityType:entityType completion:^(BOOL granted, NSError *error) { 
      if (returnBolck) { 
        returnBolck(granted); 
      } 
    }]; 
  } else if (ekAuthStatus == EKAuthorizationStatusRestricted || ekAuthStatus == EKAuthorizationStatusDenied) { 
    if (returnBolck) { 
      returnBolck(NO); 
    } 
  } else { 
    if (returnBolck) { 
      returnBolck(YES); 
    } 
  } 
}

9.iOS开发检测是否开启联网:

需要导入:

#import 

代码如下:

+ (void)openEventServiceWithBolck:(ReturnBlock)returnBolck 
{ 
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0 
  CTCellularData *cellularData = [[CTCellularData alloc] init]; 
  cellularData.cellularDataRestrictionDidUpdateNotifier = ^(CTCellularDataRestrictedState state){ 
    if (state == kCTCellularDataRestrictedStateUnknown || state == kCTCellularDataNotRestricted) { 
      if (returnBolck) { 
        returnBolck(NO); 
      } 
    } else { 
      if (returnBolck) { 
        returnBolck(YES); 
      } 
    } 
  }; 
  CTCellularDataRestrictedState state = cellularData.restrictedState; 
  if (state == kCTCellularDataRestrictedStateUnknown || state == kCTCellularDataNotRestricted) { 
    if (returnBolck) { 
      returnBolck(NO); 
    } 
  } else { 
    if (returnBolck) { 
      returnBolck(YES); 
    } 
  } 
#endif 
}

10.iOS开发检测是否开启健康:

需要导入:

#import 

代码如下:

+ (void)openHealthServiceWithBolck:(ReturnBlock)returnBolck
{
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0
 if (![HKHealthStore isHealthDataAvailable]) {
  if (returnBolck) {
   returnBolck(NO);
  }
 } else {
  HKHealthStore *healthStore = [[HKHealthStore alloc] init];
  HKObjectType *hkObjectType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeight];
  HKAuthorizationStatus hkAuthStatus = [healthStore authorizationStatusForType:hkObjectType];
  if (hkAuthStatus == HKAuthorizationStatusNotDetermined) {
   // 1. 你创建了一个NSSet对象,里面存有本篇教程中你将需要用到的从Health Stroe中读取的所有的类型:个人特征(血液类型、性别、出生日期)、数据采样信息(身体质量、身高)以及锻炼与健身的信息。
   NSSet  * healthKitTypesToRead = [[NSSet alloc] initWithArray:@[[HKObjectType characteristicTypeForIdentifier:HKCharacteristicTypeIdentifierDateOfBirth],[HKObjectType characteristicTypeForIdentifier:HKCharacteristicTypeIdentifierBloodType],[HKObjectType characteristicTypeForIdentifier:HKCharacteristicTypeIdentifierBiologicalSex],[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyMass],[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeight],[HKObjectType workoutType]]];
   // 2. 你创建了另一个NSSet对象,里面有你需要向Store写入的信息的所有类型(锻炼与健身的信息、BMI、能量消耗、运动距离)
   NSSet  * healthKitTypesToWrite = [[NSSet alloc] initWithArray:@[[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyMassIndex],[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierActiveEnergyBurned],[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierDistanceWalkingRunning],[HKObjectType workoutType]]];
   [healthStore requestAuthorizationToShareTypes:healthKitTypesToWrite readTypes:healthKitTypesToRead completion:^(BOOL success, NSError *error) {
    if (returnBolck) {
     returnBolck(success);
    }
   }];
  } else if (hkAuthStatus == HKAuthorizationStatusSharingDenied) {
   if (returnBolck) {
    returnBolck(NO);
   }
  } else {
   if (returnBolck) {
    returnBolck(YES);
   }
  }
 }
#endif
}

11.iOS开发检测是否开启Touch ID:

需要导入:

#import 

代码如下:

#pragma mark - 开启Touch ID服务
+ (void)openTouchIDServiceWithBlock:(ReturnBlock)returnBlock
{
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0
 LAContext *laContext = [[LAContext alloc] init];
 laContext.localizedFallbackTitle = @"输入密码";
 NSError *error;
 if ([laContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
  NSLog(@"恭喜,Touch ID可以使用!");
  [laContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"需要验证您的指纹来确认您的身份信息" reply:^(BOOL success, NSError *error) {
   if (success) {
    // 识别成功
    if (returnBlock) {
     [[NSOperationQueue mainQueue] addOperationWithBlock:^{
      returnBlock(YES);
     }];
    }
   } else if (error) {
    if (returnBlock) {
     [[NSOperationQueue mainQueue] addOperationWithBlock:^{
      returnBlock(NO);
     }];
    }
    if (error.code == LAErrorAuthenticationFailed) {
     // 验证失败
    }
    if (error.code == LAErrorUserCancel) {
     // 用户取消
    }
    if (error.code == LAErrorUserFallback) {
     // 用户选择输入密码
    }
    if (error.code == LAErrorSystemCancel) {
     // 系统取消
    }
    if (error.code == LAErrorPasscodeNotSet) {
     // 密码没有设置
    }
   }
  }];
 } else {
  NSLog(@"设备不支持Touch ID功能,原因:%@",error);
  if (returnBlock) {
   returnBlock(NO);
  }
 }
#endif
}

12.iOS开发检测是否开启Apple Pay:

需要导入:

#import 

代码如下:

#pragma mark - 开启Apple Pay服务 
+ (void)openApplePayServiceWithBlock:(ReturnBlock)returnBlock 
{ 
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0 
  NSArray *supportedNetworks = @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa, PKPaymentNetworkDiscover]; 
  if ([PKPaymentAuthorizationViewController canMakePayments] && [PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:supportedNetworks]) { 
    if (returnBlock) { 
      returnBlock(YES); 
    } 
  } else { 
    if (returnBlock) { 
      returnBlock(NO); 
    } 
  } 
#endif 
}

13.iOS开发检测是否开启语音识别:

需要导入:

#import 

代码如下:

#pragma mark - 开启语音识别服务
+ (void)openSpeechServiceWithBlock:(ReturnBlock)returnBlock
{
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
 SFSpeechRecognizerAuthorizationStatus speechAuthStatus = [SFSpeechRecognizer authorizationStatus];
 if (speechAuthStatus == SFSpeechRecognizerAuthorizationStatusNotDetermined) {
  [SFSpeechRecognizer requestAuthorization:^(SFSpeechRecognizerAuthorizationStatus status) {
   if (status == SFSpeechRecognizerAuthorizationStatusAuthorized) {
    dispatch_async(dispatch_get_main_queue(), ^{
     if (returnBlock) {
      returnBlock(YES);
     }
    });
   } else {
    dispatch_async(dispatch_get_main_queue(), ^{
     if (returnBlock) {
      returnBlock(YES);
     }
    });
   }
  }];
 } else if (speechAuthStatus == SFSpeechRecognizerAuthorizationStatusAuthorized) {
  if (returnBlock) {
   returnBlock(YES);
  }
 } else{
  if (returnBlock) {
   returnBlock(NO);
  }
 }
#endif
}

14.iOS开发检测是否开启媒体资料库/Apple Music:

需要导入:

#import 

代码如下:

#pragma mark - 开启媒体资料库/Apple Music 服务
+ (void)openMediaPlayerServiceWithBlock:(ReturnBlock)returnBlock
{
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_3
 MPMediaLibraryAuthorizationStatus authStatus = [MPMediaLibrary authorizationStatus];
 if (authStatus == MPMediaLibraryAuthorizationStatusNotDetermined) {
  [MPMediaLibrary requestAuthorization:^(MPMediaLibraryAuthorizationStatus status) {
   if (status == MPMediaLibraryAuthorizationStatusAuthorized) {
    dispatch_async(dispatch_get_main_queue(), ^{
     if (returnBlock) {
      returnBlock(YES);
     }
    });
   }else{
    dispatch_async(dispatch_get_main_queue(), ^{
     if (returnBlock) {
      returnBlock(NO);
     }
    });
   }
  }];
 }else if (authStatus == MPMediaLibraryAuthorizationStatusAuthorized){
  if (returnBlock) {
   returnBlock(YES);
  }
 }else{
  if (returnBlock) {
   returnBlock(NO);
  }
 }
#endif
}

15.iOS开发检测是否开启Siri:

需要导入:

#import 

代码如下:

#pragma mark - 开启Siri服务
+ (void)openSiriServiceWithBlock:(ReturnBlock)returnBlock
{
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
 INSiriAuthorizationStatus siriAutoStatus = [INPreferences siriAuthorizationStatus];
 if (siriAutoStatus == INSiriAuthorizationStatusNotDetermined) {
  [INPreferences requestSiriAuthorization:^(INSiriAuthorizationStatus status) {
   if (status == INSiriAuthorizationStatusAuthorized) {
    dispatch_async(dispatch_get_main_queue(), ^{
     if (returnBlock) {
      returnBlock(YES);
     }
    });
   } else {
    dispatch_async(dispatch_get_main_queue(), ^{
     if (returnBlock) {
      returnBlock(YES);
     }
    });
   }
  }];
 } else if (siriAutoStatus == INSiriAuthorizationStatusAuthorized) {
  if (returnBlock) {
   returnBlock(YES);
  }
 } else{
  if (returnBlock) {
   returnBlock(NO);
  }
 }
#endif
}

在.h文件中申明block

#if NS_BLOCKS_AVAILABLE 
typedef void(^ReturnBlock)(BOOL isOpen); 
#endif

由于iOS10的权限原因,需要在工程的info.plist(右击选择Open as - Source Code)中添加

 
NSPhotoLibraryUsageDescription 
App需要您的同意,才能访问相册 
 
NSCameraUsageDescription 
App需要您的同意,才能访问相机 
 
NSMicrophoneUsageDescription 
App需要您的同意,才能访问麦克风 
 
NSLocationUsageDescription 
App需要您的同意,才能访问位置 
 
NSLocationWhenInUseUsageDescription 
App需要您的同意,才能在使用期间访问位置 
 
NSLocationAlwaysUsageDescription 
App需要您的同意,才能始终访问位置 
 
NSCalendarsUsageDescription 
App需要您的同意,才能访问日历 
 
NSRemindersUsageDescription 
App需要您的同意,才能访问提醒事项 
 
NSMotionUsageDescription
 App需要您的同意,才能访问运动与健身 
 
NSHealthUpdateUsageDescription 
App需要您的同意,才能访问健康更新  
 
NSHealthShareUsageDescription 
App需要您的同意,才能访问健康分享 
 
NSBluetoothPeripheralUsageDescription 
App需要您的同意,才能访问蓝牙 
 
NSAppleMusicUsageDescription 
App需要您的同意,才能访问媒体资料库
 
NSSpeechRecognitionUsageDescription 
App需要您的同意,才能使用语音识别

感谢你能够认真阅读完这篇文章,希望小编分享的“iOS开发中如何检测是否开启定位、是否允许消息推送等权限”这篇文章对大家有帮助,同时也希望大家多多支持创新互联建站,关注创新互联网站建设公司行业资讯频道,更多相关知识等着你来学习!

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章标题:iOS开发中如何检测是否开启定位、是否允许消息推送等权限-创新互联
文章转载:http://hbruida.cn/article/egipj.html