sauchye / iosdev_notes

iOS Dev Tips(一些零散的iOS知识tips)
19 stars 5 forks source link

如何优雅的获取用户授权,如:通知,定位,相册,录音等... #3

Closed sauchye closed 9 years ago

sauchye commented 9 years ago

iOS获取系统相关权限(iOS7及以上)

获取AVAudioSession录音权限

if ([[AVAudioSession sharedInstance] respondsToSelector:@selector(requestRecordPermission:)]){
   [[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {

       if (granted) {
           //用户已允许,直接进行录制等,逻辑操作...

       }else {
           //用户拒绝,引导用户开启麦克风服务,直接跳转到该应用设置页面
       }
   }];

}
获取CLLocationManager定位权限
kCLAuthorizationStatusNotDetermined 用户没有做出选择
kCLAuthorizationStatusRestricted    无法使用定位服务,该状态用户无法改变
kCLAuthorizationStatusDenied        用户拒绝该应用使用定位服务或是定位服务总开关处于关闭状态

iOS 8
kCLAuthorizationStatusAuthorizedAlways  用户同意程序在可见时使用地理位置
kCLAuthorizationStatusAuthorizedWhenInUse 用户允许该程序运行时可以使用地理信息
kCLAuthorizationStatusAuthorized    用户允许该程序无论何时都可以使用地理信息
    if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied  ) {
        //用户已拒绝开启定位服务,处理逻辑...
        //前往 开启定位授权
            if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_7_1) {

                UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"请在iPhone的“设置->隐私->位置”中允许访问位置信息" delegate:self cancelButtonTitle:nil otherButtonTitles:@"取消", @"设置", nil];
                [alertView show];
            }else{
                kTipsAlert(@"请在iPhone的“设置->隐私->位置”中允许访问位置信息");
            }

    }else{
        //用户已同意开启定位服务,处理逻辑...
    }
直接跳转到该App设置页面,就是这样。

   UIApplication *app = [UIApplication sharedApplication];
   NSURL *settingsURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
   if ([app canOpenURL:settingsURL]) {
       [app openURL:settingsURL];
   }
sauchye commented 9 years ago

获取用户是否开启通知

- (BOOL)isAllowedNotification {

    if (FSystemVersion >= 8.0) {
        UIUserNotificationSettings *setting = [[UIApplication sharedApplication] currentUserNotificationSettings];
        if (setting.types != UIUserNotificationTypeNone) {
            return YES;
        }
    } else {

        UIRemoteNotificationType type = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
        if(type != UIRemoteNotificationTypeNone)
            return YES;
    }

    return NO;
}