?最近在處理一些問題,項目里有錄制視頻和定位功能,在第一次用戶判斷是否開啟權限時,用戶選擇不開啟,之后用戶在項目里點擊到涉及相機和定位的相關功能,需要添加的一些提示響應.
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值,確定不同的彈框,并給兩個按鈕相應的點擊事件,如果用戶點擊取消按鈕沒有不響應,點擊去設置則跳轉到手機的設置的相應位置.