iOS判斷用戶是否開啟照相機,麥克風,定位的權限以及做相應的跳轉處理

?最近在處理一些問題,項目里有錄制視頻和定位功能,在第一次用戶判斷是否開啟權限時,用戶選擇不開啟,之后用戶在項目里點擊到涉及相機和定位的相關功能,需要添加的一些提示響應.

1.相機?

首先判斷用戶是否開啟照相機權限

NSString* mediaType =AVMediaTypeVideo;

AVAuthorizationStatusauthorizationStatus = [AVCaptureDeviceauthorizationStatusForMediaType:mediaType];

if(authorizationStatus ==AVAuthorizationStatusRestricted|| authorizationStatus ==AVAuthorizationStatusDenied) {

UIAlertView*alertView=[[UIAlertViewalloc]initWithTitle:@"“紅人裝”想訪問你的相機"message:@"請在系統(tǒng)設置中開啟相機服務(設置>紅人裝>相機>開啟)"delegate:selfcancelButtonTitle:@"取消"otherButtonTitles:@"去設置",nil];

alertView.delegate=self;

alertView.tag=1;

[alertViewshow];

//用戶未開啟權限

}else{

//用戶開啟權限

}

2.麥克風

首先判斷用戶是否開啟麥克風權限

AVAuthorizationStatusauthStatus = [AVCaptureDeviceauthorizationStatusForMediaType:AVMediaTypeAudio];

switch(authStatus) {

caseAVAuthorizationStatusNotDetermined:

//沒有詢問是否開啟麥克風

_flag=1;

break;

caseAVAuthorizationStatusRestricted:

//未授權,家長限制

_flag=0;

break;

caseAVAuthorizationStatusDenied:

//玩家未授權

_flag=0;

break;

caseAVAuthorizationStatusAuthorized:

//玩家授權

_flag=2;

break;

default:

break;

}

if(_flag==0) {


UIAlertView*alertView=[[UIAlertViewalloc]initWithTitle:@"“紅人裝”想訪問你的麥克風"message:@"請在系統(tǒng)設置中開啟麥克風服務(設置>紅人裝>麥克風>開啟)"delegate:selfcancelButtonTitle:@"取消"otherButtonTitles:@"去設置",nil];

alertView.delegate=self;

alertView.tag=2;

[alertViewshow];

//用戶未開啟麥克風權限

}else{

//用戶開啟麥克風權限

}


3.定位

首先判斷用戶是否開啟定位權限

if([CLLocationManagerlocationServicesEnabled]) {

//判斷用戶是否允許程序獲取位置權限

if([CLLocationManagerauthorizationStatus]==kCLAuthorizationStatusAuthorizedWhenInUse||[CLLocationManagerauthorizationStatus]==kCLAuthorizationStatusAuthorizedAlways)

{

//用戶允許獲取位置權限


}else

{

//用戶拒絕開啟用戶權限

UIAlertView*alertView=[[UIAlertViewalloc]initWithTitle:@"打開[定位服務權限]來允許[紅人裝]確定您的位置"message:@"請在系統(tǒng)設置中開啟定位服務(設置>隱私>定位服務>開啟)"delegate:selfcancelButtonTitle:@"取消"otherButtonTitles:@"去設置",nil];

alertView.delegate=self;

alertView.tag=4;

[alertViewshow];

}

}else{

UIAlertView*alertView=[[UIAlertViewalloc]initWithTitle:@"打開[定位服務]來允許[紅人裝]確定您的位置"message:@"請在系統(tǒng)設置中開啟定位服務(設置>隱私>定位服務>紅人裝>始終)"delegate:selfcancelButtonTitle:@"取消"otherButtonTitles:@"去設置",nil];

alertView.delegate=self;

alertView.tag=3;

[alertViewshow];

}

///UIAlertViewDelegate 的代理(這里實現(xiàn)點擊彈框的跳轉事件)

-(void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

if(alertView.tag==1) {

if(buttonIndex ==1) {

NSURL*url = [NSURLURLWithString:UIApplicationOpenSettingsURLString];

if( [[UIApplicationsharedApplication]canOpenURL:url] ) {

[[UIApplicationsharedApplication]openURL:url];

}

}

}elseif(alertView.tag==2) {

if(buttonIndex ==1) {

NSURL*url = [NSURLURLWithString:UIApplicationOpenSettingsURLString];

if( [[UIApplicationsharedApplication]canOpenURL:url] ) {

[[UIApplicationsharedApplication]openURL:url];

}

}

}


if(alertView.tag==3) {

if(buttonIndex ==1) {

if([[[UIDevicecurrentDevice]systemVersion]floatValue] >=10.000000) {

//跳轉到定位權限頁面

NSURL*url = [NSURLURLWithString:UIApplicationOpenSettingsURLString];

if( [[UIApplicationsharedApplication]canOpenURL:url] ) {

[[UIApplicationsharedApplication]openURL:url];

}

}else{

//跳轉到定位開關界面

NSURL*url = [NSURLURLWithString:@"prefs:root=LOCATION_SERVICES"];

if( [[UIApplicationsharedApplication]canOpenURL:url] ) {

[[UIApplicationsharedApplication]openURL:url];

}

}

}

}elseif(alertView.tag==4) {

if(buttonIndex ==1) {

//跳轉到定位權限頁面

NSURL*url = [NSURLURLWithString:UIApplicationOpenSettingsURLString];

if( [[UIApplicationsharedApplication]canOpenURL:url] ) {

[[UIApplicationsharedApplication]openURL:url];

}

}

}

}

//主要想法就是首先判斷用戶是否開啟權限 如果沒有開啟 就彈出一個彈框提示, 兩個按鈕 一個取消 一個去設置,然后給每一個彈框不同的tag值做區(qū)別,以便在在UIAlertViewDelegate的代理方法里根據(jù)不同的tag值,確定不同的彈框,并給兩個按鈕相應的點擊事件,如果用戶點擊取消按鈕沒有不響應,點擊去設置則跳轉到手機的設置的相應位置.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容