ios 判斷使用者是否開啟許可權---並跳轉設
1、相簿相機
2、通知
3、通訊錄
4、定位
1. 判斷 訪問相簿 或 相機 許可權是否開啟
//在info.plist 裡面設定
Privacy - Camera Usage Description App需要您的同意,才能訪問相
Privacy - Photo Library Usage Description App需要您的同意,才能訪問相簿
科普:
相簿
//相簿許可權判斷 需要引入框架
#import//相簿
PHAuthorizationStatus相簿許可權狀態判斷
在8.0系統以後,新加入了Photos.framework框架,我們可以利用框架中的PHAuthorizationStatus進行相簿許可權狀態判斷。
判斷是否開啟相簿許可權 的4中狀態
typedef NS_ENUM(NSInteger,PHAuthorizationStatus) { //1. 使用者還沒有關於這個應用程式做出了選擇 PHAuthorizationStatusNotDetermined = 0, //2. 這個應用程式未被授權訪問圖片資料。使用者不能更改該應用程式的狀態,可能是由於活動的限制,如家長控制到位。 PHAuthorizationStatusRestricted, //3. 使用者已經明確否認了這個應用程式訪問圖片資料 PHAuthorizationStatusDenied, //4. 使用者授權此應用程式訪問圖片資料 PHAuthorizationStatusAuthorized }PHOTOS_AVAILABLE_IOS_TVOS(8_0, 10_0);
相機
//相簿許可權判斷 需要引入框架
#import#import
判斷是否開啟相機許可權 的4中狀態
typedef NS_ENUM(NSInteger, AVAuthorizationStatus) { //1. 表明使用者尚未選擇關於客戶端是否可以訪問硬體 AVAuthorizationStatusNotDetermined = 0, //2. 客戶端未被授權訪問硬體的媒體型別。使用者不能改變客戶機的狀態,可能由於活躍的限制,如家長控制 AVAuthorizationStatusRestricted, //3. 明確拒絕使用者訪問硬體支援的媒體型別的客戶 AVAuthorizationStatusDenied, //4. 客戶端授權訪問硬體支援的媒體型別 AVAuthorizationStatusAuthorized } NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED;
=================使用====================
//選擇從相簿獲取圖片//判斷狀態 如果已經授權 則從相簿選取相片 如果沒有授權 則跳轉到授權設定介面//選擇從相機獲取圖片//判斷狀態 如果已經授權 則開啟攝像頭 如果沒有授權 則跳轉到授權設定介面//引入下面的框架//相簿許可權判斷 需要引入框架#import//相簿//相簿許可權判斷 需要引入框架#import #import //【注意】 控制器要遵循的協議相簿
//自定義的列舉typedef NS_ENUM(NSInteger, ChosePhontType) { ChosePhontTypeAlbum, //相簿 ChosePhontTypeCamera //相機};//下面部分可以直接貼上複製使用 -(void)clickHeaderImageView{ //點選頭像 UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"選擇相片" message:nil preferredStyle:UIAlertControllerStyleActionSheet]; UIAlertAction *album = [UIAlertAction actionWithTitle:@"相簿" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { [self chosePhoto:ChosePhontTypeAlbum]; //從系統相簿選擇照片 }]; UIAlertAction *camera = [UIAlertAction actionWithTitle:@"相機" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { [self chosePhoto:ChosePhontTypeCamera]; //相機 }]; UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { }]; [alert addAction:album]; [alert addAction:camera]; [alert addAction:cancel]; [self presentViewController:alert animated:YES completion:^{ }]; } //==========訪問系統 相簿 / 相機 =============== - (void)chosePhoto:(ChosePhontType)type{ UIImagePickerController *piker = [[UIImagePickerController alloc] init]; piker.delegate = self; piker.allowsEditing = YES; if (type == ChosePhontTypeAlbum) { // 相簿 //======判斷 訪問相簿 許可權是否開啟======= PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus]; //有被授權訪問的照片資料 使用者已經明確否認了這一照片資料的應用程式訪問 if (status == PHAuthorizationStatusRestricted || status == PHAuthorizationStatusDenied) { //====沒有許可權==== UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"去開啟訪問相簿許可權?" message:nil preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { }]; UIAlertAction *ok = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) { //===無許可權 引導去開啟=== [self openJurisdiction]; }]; // 將UIAlertAction新增到UIAlertController中 [alertController addAction:cancel]; [alertController addAction:ok]; // present顯示 [self presentViewController:alertController animated:YES completion:nil]; }else{ //====有訪問相簿的許可權======= piker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; } }else if (type == ChosePhontTypeCamera) { // 相機 //======判斷 訪問相機 許可權是否開啟======= AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]; //===無許可權==== if (authStatus == AVAuthorizationStatusRestricted || authStatus ==AVAuthorizationStatusDenied){ //====沒有許可權==== UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"去開啟訪問相機許可權?" message:nil preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { }]; UIAlertAction *ok = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) { //===無許可權 引導去開啟=== [self openJurisdiction]; }]; // 將UIAlertAction新增到UIAlertController中 [alertController addAction:cancel]; [alertController addAction:ok]; // present顯示 [self presentViewController:alertController animated:YES completion:nil]; }else{ //===有許可權====== if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { //相機可用 piker.sourceType = UIImagePickerControllerSourceTypeCamera; }else{ // 相機不可用 [SVProgressHUD showErrorWithStatus:@"相機不可用"]; return; } } } [self presentViewController:piker animated:YES completion:^{ }]; } #pragma mark-------去設定介面開啟許可權---------- -(void)openJurisdiction{ NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; if ([[UIApplication sharedApplication] canOpenURL:url]) { [[UIApplication sharedApplication] openURL:url]; } } #pragma mark UIImagePickerController回撥方法================ - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { //選取的照片 //選取的照片 UIImage *image = info[UIImagePickerControllerEditedImage]; _tableViewHeaderView.headerV.image = image; [self dismissViewControllerAnimated:YES completion:nil]; } - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { //取消選擇 [self dismissViewControllerAnimated:YES completion:nil]; }
2 、定位
=======檢測是否開啟定位======
在info.plist 裡面配置
Privacy - Location When In Use Usage Description App需要使用定位功能Privacy - Location Always Usage Description App需要使用定位功能
引入框架
#import//定位遵循協議
typedef NS_ENUM(int, CLAuthorizationStatus) { //定位服務授權狀態是使用者沒有決定是否使用定位服務 kCLAuthorizationStatusNotDetermined = 0, //定位服務授權狀態是受限制的。可能是由於活動限制定位服務,使用者不能改變。這個狀態可能不是使用者拒絕的定位服務 kCLAuthorizationStatusRestricted, //定位服務授權狀態已經被使用者明確禁止,或者在設定裡的定位服務中關閉 kCLAuthorizationStatusDenied, //定位服務授權狀態已經被使用者允許在任何狀態下獲取位置資訊。包括監測區域、訪問區域、或者在有顯著的位置變化的時候 kCLAuthorizationStatusAuthorizedAlways NS_ENUM_AVAILABLE(10_12, 8_0), //定位服務授權狀態僅被允許在使用應用程式的時候 kCLAuthorizationStatusAuthorizedWhenInUse NS_ENUM_AVAILABLE(NA, 8_0), };
【注意】
//1. //判斷定位是否開啟是判斷的整個手機系統的定位是否開啟,並不是針對這一應用 [CLLocationManager locationServicesEnabled] //跳轉到 整個手機系統的“定位”設定介面 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=LOCATION_SERVICES"]]; //2. //跳轉至 系統的許可權設定介面 NSURL *settingsURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; [[UIApplication sharedApplication] openURL:settingsURL];
=================使用=================
引入框架 #import//定位遵循協議 //當前狀態CLAuthorizationStatus status = [CLLocationManager authorizationStatus];if ([CLLocationManager locationServicesEnabled] && [CLLocationManager authorizationStatus] != kCLAuthorizationStatusDenied) { //定位開啟 }//全域性變數CLLocationManager * locationManager; NSString * currentCity; //當前城市 NSString *prv; //當前省-(void)addLocation{ //開始定位 //判斷定位是否開啟是判斷的整個手機系統的定位是否開啟,並不是針對這一應用 //判斷定位功能是否開啟 if ([CLLocationManager locationServicesEnabled]) { locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; //遵循協議 //精確定位 locationManager.desiredAccuracy = kCLLocationAccuracyBest; [locationManager requestWhenInUseAuthorization]; //使用時定位 currentCity = [[NSString alloc] init]; [locationManager startUpdatingLocation]; //開始定位 } }#pragma mark CoreLocation delegate----- 定位----//定位失敗則執行此代理方法//定位失敗彈出提示框,點選"開啟定位"按鈕,會開啟系統的設定,提示開啟定位服務- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { UIAlertController * alertVC = [UIAlertController alertControllerWithTitle:@"允許"定位"提示" message:@"請在設定中開啟定位" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction * ok = [UIAlertAction actionWithTitle:@"開啟定位" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { //開啟app定位設定 NSURL *settingsURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; [[UIApplication sharedApplication] openURL:settingsURL]; }]; UIAlertAction * cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { }]; [alertVC addAction:cancel]; [alertVC addAction:ok]; [self presentViewController:alertVC animated:YES completion:nil]; }//定位成功- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { // [locationManager stopUpdatingLocation]; CLLocation *currentLocation = [locations lastObject]; CLGeocoder * geoCoder = [[CLGeocoder alloc] init]; //反編碼 [geoCoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray * _Nullable placemarks, NSError * _Nullable error) { if (placemarks.count > 0) { CLPlacemark *placeMark = placemarks[0]; currentCity = placeMark.locality; if (!currentCity) { currentCity = @"無法定位當前城市"; } NSLog(@"%@",currentCity); //這就是當前的城市 NSLog(@"%@",placeMark.name);//具體地址: xx市xx區xx街道 //administrativeArea 省 NSLog(@"%@",placeMark.administrativeArea); } else if (error == nil && placemarks.count == 0) { NSLog(@"No location and error return"); } else if (error) { NSLog(@"location error: %@ ",error); } }]; }
3.、推送
//3.=======檢測是否允許訊息推送======#import//====方法一+ (BOOL)isAllowedNotification { if ([UIDevice isSystemVersioniOS8]) { // >= ios8 // system is iOS8 UIUserNotificationSettings *setting = [[UIApplication sharedApplication ] currentUserNotificationSettings]; if (UIUserNotificationTypeNone != setting.types) { return YES; } } else {//iOS7 UIRemoteNotificationType type = [[UIApplication sharedApplication] enabledRemoteNotificationTypes]; if(UIRemoteNotificationTypeNone != type) { return YES; }else } return NO; } + (BOOL)isSystemVersioniOS8 { //check systemVerson of device UIDevice *device = [UIDevice currentDevice]; float sysVersion = [device.systemVersion floatValue]; if (sysVersion >= 8.0f) { return YES; } return NO; }//====方法二if ([[UIDevice currentDevice].systemVersion floatValue]>=8.0f) { UIUserNotificationSettings *setting = [[UIApplication sharedApplication] currentUserNotificationSettings]; if (UIUserNotificationTypeNone == setting.types) { NSLog(@"推送關閉"); }else{ NSLog(@"推送開啟"); } }else{ UIRemoteNotificationType type = [[UIApplication sharedApplication] enabledRemoteNotificationTypes]; if(UIRemoteNotificationTypeNone == type){ NSLog(@"推送關閉"); }else{ NSLog(@"推送開啟"); } }// 去設定[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]; //===方法三+ (void)isOpenMessageNotificationServiceWithBlock:(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)isOpenMessageNotificationServiceWithBlock:(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 }
4、通訊錄
NSContactsUsageDescription
--->通訊錄
5、麥克風
NSMicrophoneUsageDescription -> 麥克風
作者:子瘋zp
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4369/viewspace-2804673/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- iOS判斷使用者是否開啟APP通知開關iOSAPP
- shell判斷檔案,目錄是否存在或者具有許可權【轉】
- Linux - 判斷檔案/目錄是否存在/具有許可權Linux
- Struts開發一個許可權驗證攔截器來判斷使用者是否登入
- App跳轉到許可權設定介面APP
- 如何判斷是否得到"android.permission.PACKAGE_USAGE_STATS"許可權AndroidPackage
- django中介軟體中判斷前端是不是ajax請求,從而判斷是否有許可權Django前端
- 判斷是否微信 IPhone 開啟iPhone
- 如何檢測應用通知許可權?如何跳轉通知許可權設定頁?
- 判斷Fragment是否對使用者可見Fragment
- iOS開發-如何判斷手機是否開啟了放大模式iOS模式
- 利用HttpModule 檢查使用者是否有許可權開啟指定的網址HTTP
- 判斷服務是否開啟,應用是否安裝,並安裝應用
- Spring Security 基於URL的許可權判斷Spring
- 基於二進位制的許可權判斷
- 判斷excel檔案是否被開啟Excel
- 在html頁面中判斷本地app是否安裝並開啟HTMLAPP
- MAC 開啟root許可權Mac
- 判斷oracle是否啟動Oracle
- iOS判斷是否存在網路iOS
- joomla原始碼探析續(二十六)JUser物件和使用者許可權判斷OOM原始碼物件
- MongoDB使用者許可權管理,設定密碼並連線MongoDB密碼
- iOS 10設定應用許可權iOS
- 協同平臺檢視許可權開啟業務物件提示"當前使用者沒有許可權!請檢查使用者[BOS設計器]的[編輯]許可權與應用的編輯許可權!"物件
- mysql8.0新增使用者,並指定許可權MySql
- mysql 建立新使用者 並賦予許可權MySql
- AIX 的許可許可權(轉)AI
- jQuery 判斷使用者是否存在jQuery
- Oracle 使用者、物件許可權、系統許可權Oracle物件
- Oracle使用者、許可權、角色管理【轉】Oracle
- 使用者許可權設計(三)——通用資料許可權管理系統設計
- Middleware 判斷當前是否手機端瀏覽器,並跳轉到手機端的介面瀏覽器
- java判斷IOS還是安卓,跳轉不同的連線JavaiOS安卓
- iOS 10 infolist 許可權iOS
- 使用者有connect,resource,dba角色許可權後回收dba許可權導致無UNLIMITED TABLESPACE許可權造成業務中斷MIT
- NAS使用者許可權的設定
- 使用者許可權繼承另一使用者的許可權繼承
- C語言判斷檔案是否存在,判斷檔案可讀可寫可執行C語言