一个 APP 需要使用各种权限,比如相机,相册,位置等等,一般情况下我们习惯用到的时候,就去判断权限然后调用系统的设备来使用.这样也符合苹果的安全特点.
但是,让我们在编程过程中,会发现,如果事先不知道是否已经请求过权限了,那么就需要在使用之前先判断是否有权限,判断完成之后,等待用户赋予权限,然后继续执行.
拿通讯录举例来说,假设我们要打开系统的通讯录列表,要这么写
CNAuthorizationStatus status = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];
//等待授权状态
if (status == CNAuthorizationStatusNotDetermined) {
CNContactStore *store = [[CNContactStore alloc] init];
[store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError* _Nullable error) {
granted?[self openContact]:[JDMessageView showMessage:@"无法读取通讯录"];
}];
}
//应用程序未被授权访问联系人数据。*用户不能更改该应用程序的状态,可能由于活跃的限制,如家长控制
else
{
if(status == CNAuthorizationStatusRestricted)
[JDMessageView showMessage:@"无权访问"];
/* !明确拒绝用户访问联系人数据的应用程序。*/
else if (status == CNAuthorizationStatusDenied)
[JDMessageView showMessage:@"无访问权限"];
else if (status == CNAuthorizationStatusAuthorized)
[self openContact];
}
打开系统通讯录列表方法
- (void)openContact
{
CNContactPickerViewController *pickerVC =[[CNCon