【发布时间】:2010-06-15 02:46:11
【问题描述】:
如何检测 Safari 是否已被 iPhone 上的家长控制禁用?我知道这是可能的,因为在禁用 Safari 之前,App X3Watch 拒绝工作。据我所知,没有用于家长控制的 api,那么可以使用什么技术呢?
【问题讨论】:
标签: objective-c iphone safari
如何检测 Safari 是否已被 iPhone 上的家长控制禁用?我知道这是可能的,因为在禁用 Safari 之前,App X3Watch 拒绝工作。据我所知,没有用于家长控制的 api,那么可以使用什么技术呢?
【问题讨论】:
标签: objective-c iphone safari
这个我没测试过,但是是OS3.0及以后的,你可以用[[UIApplication sharedApplication] canOpenURL:myURL]检测系统上的任何应用程序是否可以打开一个URL。如果 Safari 被禁用,我敢打赌它会返回 NO。
【讨论】:
这是我尝试将解决方案包含在视图控制器中。需要使用这两个布尔值,因为用户可以在加载视图时打开独立于 safari 的外部程序,但尚未打开需要 safari 的按钮。
@implementation ViewController {
@private BOOL externalProgramOpened;
@private BOOL buttonPressed;
}
-(void) setExternalProgramOpened {
// Only set to yes if we're trying to open safari
if(buttonPressed) {
externalProgramOpened = YES;
}
}
-(void) notifyUserOfRestrictedAccess {
if(externalProgramOpened == NO) {
[[[UIAlertView alloc] initWithTitle:@"Safari Needs to be enabled!"
message:@"It looks like the Safari browser is
disabled. Please enable it
(Settings>General>Restrictions) in order to
continue."
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles: nil] show];
} else {
externalProgramOpened = NO;
}
buttonPressed = NO;
}
-(void) viewWillAppear:(BOOL)animated {
externalProgramOpened = NO;
buttonPressed = NO;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(setExternalProgramOpened)
name:UIApplicationWillResignActiveNotification
object:nil];
}
-(void) viewWillDisappear:(BOOL)animated {
[[NSNotificationCenter defaultCenter] removeObserver:self
name:UIApplicationWillResignActiveNotification
object:nil];
[super viewWillDisappear:animated];
}
- (IBAction)buttonPressed:(id)sender {
buttonPressed = YES;
NSString * URL = *someURL*;
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:URL]];
[self performSelector:@selector(notifyUserOfRestrictedAccess) withObject:self
afterDelay:.75];
}
【讨论】: