APP許可權相關的東西

根本停不下來發表於2018-04-25

許可權一般有三種狀態:未決定、明確地同意了、明確的拒絕了。
如果使用者未決定,可以去請求這個許可權,或者直接執行某些邏輯,這些邏輯在執行的時候系統會自動彈出請求許可權的alert。
如果使用者同意了,就可以順利地做接下來的邏輯。
如果使用者明確地拒絕了,這時就不能使用系統的方法去請求許可權了,而是要引導使用者去設定頁面開啟相關許可權。

//去'設定'的程式碼
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
    [[UIApplication sharedApplication] openURL:url];
}
複製程式碼

判斷使用者是否是否允許通知

+ (BOOL)cj_isUserAllowNotification {
    return [[UIApplication sharedApplication] isRegisteredForRemoteNotifications];
}
複製程式碼

判斷使用者是否允許定位

+ (BOOL)cj_isUserAllowLocation {
    return !([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied);
}
複製程式碼

判斷使用者的麥克風許可權

AVAudioSessionRecordPermissionUndetermined:表示使用者未決定,執行 - (void)cj_requestPermissionForAudioWithAgreedHandle:(void(^)(void))handle 方法,可以彈出請求許可權的alert框,並且處理使用者同意之後的事情。
AVAudioSessionRecordPermissionDenied:表示使用者已經明確地拒絕了,這個時候要引導使用者去設定介面開啟許可權。
AVAudioSessionRecordPermissionGranted:表示使用者已經同意了。

+ (AVAudioSessionRecordPermission)cj_askPermissionStatusForRecordAudio {
    return [[AVAudioSession sharedInstance] recordPermission];
}
複製程式碼
  • 請求使用者的麥克風許可權
- (void)cj_requestPermissionForAudioWithAgreedHandle:(void(^)(void))handle
{
    AVAudioSession* sharedSession = [AVAudioSession sharedInstance];
    [sharedSession requestRecordPermission:^(BOOL granted) {
        dispatch_sync(dispatch_get_main_queue(), ^{
            //使用者點選了允許
            if (granted) { 
                if (handle) handle();
            }
        });
    }];
}
複製程式碼

判斷使用者的相簿許可權

PHAuthorizationStatusNotDetermined:表示使用者還未決定,這個時候執行 - (void)cj_requestPermissionForPhotoLibraryWithAgreeHandle:(void(^)(void))handle 方法,可以彈出請求許可權的alert框,並且處理使用者同意之後的事情。
PHAuthorizationStatusAuthorized:表示使用者已經同意,可以直接處理。 PHAuthorizationStatusDeniedPHAuthorizationStatusRestricted:表示使用者已明確拒絕或沒有許可權(可能是家長控制),這時要引導使用者去設定介面開啟相簿許可權。

+ (PHAuthorizationStatus)cj_askPermissionStatusForPhotoLibrary {
    return [PHPhotoLibrary authorizationStatus];
}
複製程式碼
  • 請求使用者的相簿許可權
- (void)cj_requestPermissionForPhotoLibraryWithAgreeHandle:(void(^)(void))handle {
    [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
        dispatch_async(dispatch_get_main_queue(), ^{
            //使用者點選了允許
            if (status == PHAuthorizationStatusAuthorized) {
                if (handle) handle();
            }
        });
    }];
}
複製程式碼

判斷使用者的相機許可權

AVAuthorizationStatusRestrictedAVAuthorizationStatusDenied:表示使用者不同意使用。這個時候要引導使用者去設定介面介面開啟相機許可權。
如果返回值不是上面兩種請求,則說明使用者未決定或者使用者已經同意了,可以直接呼叫相機。如果使用者是未同意,那麼在呼叫相機的時候系統會自動彈出許可權的請求框。

+ (AVAuthorizationStatus)cj_askPermissionStatusForCamera {
    return [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
}複製程式碼

相關文章