【问题标题】:How to detect if Safari is disabled on iPhone如何检测 iPhone 上是否禁用了 Safari
【发布时间】:2010-06-15 02:46:11
【问题描述】:

如何检测 Safari 是否已被 iPhone 上的家长控制禁用?我知道这是可能的,因为在禁用 Safari 之前,App X3Watch 拒绝工作。据我所知,没有用于家长控制的 api,那么可以使用什么技术呢?

【问题讨论】:

    标签: objective-c iphone safari


    【解决方案1】:

    这个我没测试过,但是是OS3.0及以后的,你可以用[[UIApplication sharedApplication] canOpenURL:myURL]检测系统上的任何应用程序是否可以打开一个URL。如果 Safari 被禁用,我敢打赌它会返回 NO

    【讨论】:

    • 这还能用吗?我在 iOS 6(iPad 3)上试过这个,但即使 Safari 在限制中被禁用,它也会返回 YES。但是,如果我真的调用 openURL:,Safari 在禁用时不会打开,正如预期的那样。
    • 回答我自己的问题:link
    【解决方案2】:

    这是我尝试将解决方案包含在视图控制器中。需要使用这两个布尔值,因为用户可以在加载视图时打开独立于 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];
    }
    

    【讨论】:

      猜你喜欢
      • 2011-02-25
      • 1970-01-01
      • 2013-02-19
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      • 2014-11-18
      相关资源
      最近更新 更多