检查权限而不被系统询问
Check for permissions without being asked by the system
我希望我的应用检查它是否有权使用设备联系人。
这是我正在使用的代码:
- (void)isContactsAutherizedWithCompletion:(void(^)(BOOL granted))completion {
self.addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL);
ABAddressBookRegisterExternalChangeCallback(self.addressBookRef, MyAddressBookExternalChangeCallback, (__bridge_retained void *)self);
if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {
ABAddressBookRequestAccessWithCompletion(self.addressBookRef, ^(bool granted, CFErrorRef error) {
if (granted) {
completion(YES);
} else {
completion(NO);
}
});
} else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {
completion(YES);
} else {
completion(NO);
}
}
但是使用这段代码,系统会自动询问我是否要授予权限。我不想被问到,我只想知道它是否有权限。
有人有解决办法吗?
谢谢
基于权限的访问有三种状态。
- 您已获得访问权限。
- 您已被拒绝访问。
- 尚未询问该用户。
第一次打开应用程序并尝试访问需要权限的内容时,它会询问。没有办法解决这个问题。
如果您获得许可,它将永远不会再询问并且会正常工作。
如果您被拒绝访问,那么它也不会再询问并且请求将失败。
每个系统只会询问用户一次。这就是它必须工作的方式。
在这种情况下,它处于状态 3。因此它既没有也没有没有权限。因此检查无法完成。它必须落入状态 1 或 2 才能计算出应用程序是否具有权限。
即这里的一切似乎都正常工作。
来自 doc:
typedef CF_ENUM (CFIndex, ABAuthorizationStatus ) {
kABAuthorizationStatusNotDetermined = 0,
kABAuthorizationStatusRestricted,
kABAuthorizationStatusDenied,
kABAuthorizationStatusAuthorized
};
所以检查状态是否为 kABAuthorizationStatusAuthorized
并且你确定你有权限,在所有其他情况下你没有权限,要么是因为用户没有接受,要么是因为你还没有请求权限
我希望我的应用检查它是否有权使用设备联系人。
这是我正在使用的代码:
- (void)isContactsAutherizedWithCompletion:(void(^)(BOOL granted))completion {
self.addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL);
ABAddressBookRegisterExternalChangeCallback(self.addressBookRef, MyAddressBookExternalChangeCallback, (__bridge_retained void *)self);
if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {
ABAddressBookRequestAccessWithCompletion(self.addressBookRef, ^(bool granted, CFErrorRef error) {
if (granted) {
completion(YES);
} else {
completion(NO);
}
});
} else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {
completion(YES);
} else {
completion(NO);
}
}
但是使用这段代码,系统会自动询问我是否要授予权限。我不想被问到,我只想知道它是否有权限。
有人有解决办法吗?
谢谢
基于权限的访问有三种状态。
- 您已获得访问权限。
- 您已被拒绝访问。
- 尚未询问该用户。
第一次打开应用程序并尝试访问需要权限的内容时,它会询问。没有办法解决这个问题。
如果您获得许可,它将永远不会再询问并且会正常工作。
如果您被拒绝访问,那么它也不会再询问并且请求将失败。
每个系统只会询问用户一次。这就是它必须工作的方式。
在这种情况下,它处于状态 3。因此它既没有也没有没有权限。因此检查无法完成。它必须落入状态 1 或 2 才能计算出应用程序是否具有权限。
即这里的一切似乎都正常工作。
来自 doc:
typedef CF_ENUM (CFIndex, ABAuthorizationStatus ) {
kABAuthorizationStatusNotDetermined = 0,
kABAuthorizationStatusRestricted,
kABAuthorizationStatusDenied,
kABAuthorizationStatusAuthorized
};
所以检查状态是否为 kABAuthorizationStatusAuthorized
并且你确定你有权限,在所有其他情况下你没有权限,要么是因为用户没有接受,要么是因为你还没有请求权限