我使用以下代码来检测这些2(推送通知和位置服务)
[postvars setObject:([CLLocationManager locationServicesEnabled])?@"true":@"false" forKey:@"locationServicesEnabled"];
BOOL pushEnabled = [[UIApplication sharedApplication] isRegisteredForRemoteNotifications];
[postvars setObject:(pushEnabled)?@"true":@"false" forKey:@"pushServicesEnabled"];
但问题是,即使我在应用程序中出现提示时点按“不允许”,我也会始终认同这两个问题。同样在设置应用中,我检查了“位置”设置为“从不”,并且通知子标题显示为关闭。这段代码有什么问题?任何人都可以指导我。
答案 0 :(得分:3)
仅检查[CLLocationManager locationServicesEnabled]
是不够的。
if([CLLocationManager locationServicesEnabled] &&
[CLLocationManager authorizationStatus] != kCLAuthorizationStatusDenied)
{
[postvars setObject:@"true" forKey:@"locationServicesEnabled"];
}
通知检查这个真棒SO answer
BOOL pushEnabled = [[UIApplication sharedApplication] isRegisteredForRemoteNotifications];
[postvars setObject:(pushEnabled)?@"true":@"false" forKey:@"pushServicesEnabled"];
UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
if (types == UIRemoteNotificationTypeNone)
{
[postvars setObject:@"false" forKey:@"pushServicesEnabled"];
}
答案 1 :(得分:2)
检查是否已启用推送通知或已启用位置服务:
推送通知:
从iOS 8.0以上,它会注册设备并提供令牌,即使用户选择退出也是如此。
但是,当发送推送时,不会向用户显示推送,因此它将返回true
。
- (BOOL)isPushNotificationsEnabled {
if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]) {
UIUserNotificationType types = [[[UIApplication sharedApplication] currentUserNotificationSettings] types];
return (types & UIUserNotificationTypeAlert);
}
else {
UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
return (types & UIRemoteNotificationTypeAlert);
}
}
自iOS8以来, enabledRemoteNotificationTypes
已被弃用。
要在iOS8中检查远程通知状态,您可以使用:
[[UIApplication sharedApplication] isRegisteredForRemoteNotifications];
在此处查看答案:detect “Allow Notifications” is on/off for iOS8
在这里阅读文档:
另请阅读此处的主题:https://forums.developer.apple.com/thread/16958
位置服务:
需要同时检查locationServicesEnabled
和authorizationStatus
,
if([CLLocationManager locationServicesEnabled] &&
[CLLocationManager authorizationStatus] != kCLAuthorizationStatusDenied)
{
//Enabled
}