【问题标题】:How to check the “Allow Full Access” is enabled in iOS 10?如何检查 iOS 10 中是否启用了“允许完全访问”?
【发布时间】:2017-01-17 23:01:06
【问题描述】:

如何在 iOS 10 中检查“允许完全访问”是否启用?

此方法不适用于 iOS 10

-(BOOL)isOpenAccessGranted{
    return [UIPasteboard generalPasteboard];
}

【问题讨论】:

  • 该代码无法编译。当BOOL 是返回类型时,您不能返回UIPasteboard
  • 这不是一个有用的响应。我想我们都知道OP在这里的意图。 @Rachit,您找到解决方案了吗?

标签: ios ios10 custom-keyboard ios-extensions


【解决方案1】:

这是一个客观的 c 版本

-(BOOL) checkIfFullAccessEnabled {
NSOperatingSystemVersion osv = [NSProcessInfo processInfo].operatingSystemVersion;
if(osv.majorVersion >= 10) {
    UIPasteboard *pb = [UIPasteboard generalPasteboard];
    if(pb.hasStrings || pb.hasURLs || pb.hasColors || pb.hasImages) {
        return YES;
    }
    else {
        NSString *ustr = pb.string;
        pb.string = @"777-TEST-123";
        if(pb.hasStrings) {
            pb.string = ustr;
            return YES;
        }
        else {
            return NO;
        }
    }
}
else if([UIPasteboard generalPasteboard] != nil) {
    return YES;
}
else {
    return NO;
}

}

【讨论】:

    【解决方案2】:

    用户@user979686 在下面的帖子中发布了一个解决方案,但我没有测试这个。

    https://stackoverflow.com/a/38903406/4792451

    为了清楚起见,在此处发布代码。

    let originalString = UIPasteboard.general.string
    UIPasteboard.general.string = "TEST"
    if UIPasteboard.general.hasStrings
    {
        UIPasteboard.general.string = originalString
        hasFullAccess = true
    }
    else
    {
         hasFullAccess = false
    }
    

    【讨论】:

    • 这不是开发人员的最佳解决方案,因为它会在 UIPasteboard 上强制设置 TEST 字符串然后进行检查。如果 UIPasteboard 上已经有用户的敏感内容,也会发生这种情况,然后该数据将被 TEST 替换。所以这不好。
    • 我同意,我只是说明另一个用户发布的一个解决方案。你知道更好的方法吗?
    • 我也在寻找最好的方法。
    【解决方案3】:

    我今天一直在对此进行测试,看来您无需在粘贴板上设置任何内容即可验证您是否具有访问权限。您需要做的就是测试粘贴板上是否有东西。当然,如果粘贴板碰巧完全是空的,那么这不是一个详尽的测试,所以在这种情况下你确实需要设置一些东西,但是你已经排除了任何被替换的可能性。这是我想出的

    func checkFullAccess() -> Bool
    {
        if #available(iOSApplicationExtension 10.0, *) {
            let pasty = UIPasteboard.general
            if pasty.hasURLs || pasty.hasColors || pasty.hasStrings || pasty.hasImages {
                return true
            } else {
                pasty.string = "TEST"
                if pasty.hasStrings {
                    pasty.string = ""
                    return true
                }
            }
        } else {
            // Fallback on earlier versions
            var clippy : UIPasteboard?
            clippy = UIPasteboard.general
            return clippy != nil
        }
        return false
    }
    

    在我的测试中,我发现所有检查(hasString、hasImages 等)都会返回 false,即使粘贴板上的内容关闭了完全访问权限。如果它们都返回 false 那么它可能真的是空的,所以你尝试在这种情况下设置一些东西。如果它不为空,则您无权访问并且不会替换任何内容,如果它为空且您确实可以访问,则文本将被放置在那里,您可以将其返回到之前的状态。

    HTH, 迈克

    【讨论】:

    • 我怎么能用 swift 2.2 做到这一点??
    猜你喜欢
    • 2014-10-17
    • 2017-08-30
    • 2015-10-08
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    相关资源
    最近更新 更多