iOS之访问权限 |
您所在的位置:网站首页 › ios权限管理在哪里 › iOS之访问权限 |
从ios7开始,用户可以在设置->隐私->中开启或关闭某些系统权限,比如访问相册,相机 ,通讯录,地图,麦克风等。因此,在我们的程序中,如果要访问系统的某些功能,则最好判断一下权限是否开启。否则用户不能正常使用,也一头雾水,还以为程序出错了。 访问摄像头: 需要导入 #import [objc] view plain copyif(isIOS7AndLater) { NSString *mediaType = AVMediaTypeVideo;// Or AVMediaTypeAudio AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType]; NSLog(@"---cui--authStatus--------%d",authStatus); // This status is normally not visible—the AVCaptureDevice class methods for discovering devices do not return devices the user is restricted from accessing. if(authStatus ==AVAuthorizationStatusRestricted){ NSLog(@"Restricted"); }else if(authStatus == AVAuthorizationStatusDenied){ // The user has explicitly denied permission for media capture. NSLog(@"Denied"); //应该是这个,如果不允许的话 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"请在设备的"设置-隐私-相机"中允许访问相机。" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil]; [alert show]; [alert release]; return; } else if(authStatus == AVAuthorizationStatusAuthorized){//允许访问 // The user has explicitly granted permission for media capture, or explicit user permission is not necessary for the media type in question. NSLog(@"Authorized"); }else if(authStatus == AVAuthorizationStatusNotDetermined){ // Explicit user permission is required for media capture, but the user has not yet granted or denied such permission. [AVCaptureDevice requestAccessForMediaType:mediaType completionHandler:^(BOOL granted) { if(granted){//点击允许访问时调用 //用户明确许可与否,媒体需要捕获,但用户尚未授予或拒绝许可。 NSLog(@"Granted access to %@", mediaType); } else { NSLog(@"Not granted access to %@", mediaType); } }]; }else { NSLog(@"Unknown authorization status"); } }麦克风权限检测: [objc] view plain copy//检测麦克风功能是否打开 [[AVAudioSessionsharedInstance]requestRecordPermission:^(BOOL granted) { if (!granted) { [ViewUtilalertViewWithString:NSLocalizedString(@"麦克风功能未开启",nil)]; } else { [selfrecord:sender]; } }]; 相册权限检测:需要#import //导入此类和AssetsLibrary.framework框架 [objc] view plain copyint author = [ALAssetsLibrary authorizationStatus]; NSLog(@"author type:%d",author); if(author == ALAuthorizationStatusRestricted || author == ALAuthorizationStatusDenied) { // The user has explicitly denied permission for media capture. UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"无法使用相册" message:@"请在iPhone的\"设置-隐私-照片\"中允许访问照片。" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil]; [alert show]; [alert release]; return;ALAssetsLibrary详解 ALAssetsLibrary类是代表系统中整个资源库,使用它可以访问资源库中的资源和保存照片,视频等功能。 _library = [[ALAssetsLibrary alloc]init]; //判断当前应用是否能访问相册资源 /* typedef NS_ENUM(NSInteger, ALAuthorizationStatus) { ALAuthorizationStatusNotDetermined = 0, 用户尚未做出了选择这个应用程序的问候 ALAuthorizationStatusRestricted, 此应用程序没有被授权访问的照片数据。可能是家长控制权限。 ALAuthorizationStatusDenied, 用户已经明确否认了这一照片数据的应用程序访问. ALAuthorizationStatusAuthorized 用户已授权应用访问照片数据. } */ int author = [ALAssetsLibrary authorizationStatus]; NSLog(@"author type:%d",author); //关闭监听共享照片流产生的频繁通知信息 [ALAssetsLibrary disableSharedPhotoStreamsSupport]; //创建一个相册到相册资源中,并通过block返回创建成功的相册ALAssetsGroup [_library addAssetsGroupAlbumWithName:@"test" resultBlock:^(ALAssetsGroup *group) { //NSString *const ALAssetsGroupPropertyName; //NSString *const ALAssetsGroupPropertyType; //NSString *const ALAssetsGroupPropertyPersistentID; //NSString *const ALAssetsGroupPropertyURL; //查看相册的名字 NSLog(@"ALAssetsGroupPropertyName:%@",[group valueForProperty:ALAssetsGroupPropertyName]); //查看相册的类型 NSLog(@"ALAssetsGroupPropertyType:%@",[group valueForProperty:ALAssetsGroupPropertyType]); //查看相册的存储id NSLog(@"ALAssetsGroupPropertyPersistentID:%@",[group valueForProperty:ALAssetsGroupPropertyPersistentID]); //查看相册存储的位置地址 NSLog(@"ALAssetsGroupPropertyURL:%@",[group valueForProperty:ALAssetsGroupPropertyURL]); groupURL = [group valueForProperty:ALAssetsGroupPropertyURL]; } failureBlock:^(NSError *error) { }]; 新添加了一个名为test的相册 [NSThread sleepForTimeInterval:0.5]; //通过url地址在相册资源中获取该地址的资源文件ALAsset,有可能是相片或视频 [_library assetForURL:[NSURL URLWithString:@""] resultBlock:^(ALAsset *asset) { /* NSString *const ALAssetPropertyType; NSString *const ALAssetPropertyLocation; NSString *const ALAssetPropertyDuration; NSString *const ALAssetPropertyOrientation; NSString *const ALAssetPropertyDate; NSString *const ALAssetPropertyRepresentations; NSString *const ALAssetPropertyURLs; NSString *const ALAssetPropertyAssetURL; */ //查看资源的地理位置信息 NSLog(@"ALAssetPropertyLocation:%@",[asset valueForProperty:ALAssetPropertyLocation]); //如果资源是视频,查看视频的时长 NSLog(@"ALAssetPropertyDuration:%@",[asset valueForProperty:ALAssetPropertyDuration]); //查看资源的方向,图片的旋转方向 NSLog(@"ALAssetPropertyOrientation:%@",[asset valueForProperty:ALAssetPropertyOrientation]); //查看资源的创建时间 NSLog(@"ALAssetPropertyDate:%@",[asset valueForProperty:ALAssetPropertyDate]); //查看资源的描述信息 NSLog(@"ALAssetPropertyRepresentations:%@",[asset valueForProperty:ALAssetPropertyRepresentations]); NSLog(@"ALAssetPropertyURLs:%@",[asset valueForProperty:ALAssetPropertyURLs]); //查看资源的url路径 NSLog(@"ALAssetPropertyAssetURL:%@",[asset valueForProperty:ALAssetPropertyAssetURL]); } failureBlock:^(NSError *error) { }]; //通过url地址获取相册资源中的一个相册 [_library groupForURL:groupURL resultBlock:^(ALAssetsGroup *group) { NSLog(@"ALAssetsGroupPropertyName:%@",[group valueForProperty:ALAssetsGroupPropertyName]); } failureBlock:^(NSError *error) { }]; //根据选择的类型遍历相册资源中的相对应类型的所有相册,其中stop行参是指针,表示是否停止迭代,当赋值为false则停止 /* enum { ALAssetsGroupLibrary = (1 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |