ios - 我们可以在 iOS 上读取无线数据权限吗?
问题描述
如果无法访问互联网,是否可以以编程方式区分以下许可情况?
- 用户拒绝为应用程序使用数据的权限的情况。
- 用户已授予使用数据的权限,但手机处于飞行模式(或根本没有 SIM/WiFi)的情况。
我想阅读那些无线数据权限以区分上述情况以获得更友好的错误消息(即在一种情况下我建议验证权限,在另一种情况下我建议检查飞行模式)
我所能找到的只是获得互联网可达性,基于How to use SCNetworkReachability in Swift,但它不知道实际权限:
import SystemConfiguration
@available(iOS 9.0, macOS 10.11, *)
static func internetConnectionIsReachable() -> Bool {
var zeroAddress = sockaddr_in6()
zeroAddress.sin6_len = UInt8(MemoryLayout<sockaddr_in6>.size)
zeroAddress.sin6_family = sa_family_t(AF_INET6)
guard let reachability = withUnsafePointer(to: &zeroAddress, {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
SCNetworkReachabilityCreateWithAddress(nil, $0)
}
}) else {
return false
}
var flags: SCNetworkReachabilityFlags = []
guard SCNetworkReachabilityGetFlags(reachability, &flags) else {
return false
}
return flags.contains(.reachable)
}
解决方案
总之,您可能无法区分这些情况,而且您可能不应该这样做。苹果甚至不希望你使用可达性。他们的观点是:你的不去推理,你的去做(即尝试使用网络)或死(即失败)。如果你要失败,就优雅地失败,并且你已经完成了你的工作。
推荐阅读
- java - 如何存储所有ArrayList
> 值到 ArrayList ? - python - Keras+tensorflow 批量图像分类
- java - 如何在构造函数中注入 lambda 方法?
- javascript - Google Anlaytics 异步跟踪代码段的含义是什么?
- mysql - 基于具有值替换的两个表创建视图
- python - Django Admin:通过内联多对多的多表继承子模型失败并显示“请更正以下错误”
- angularjs - Angularjs/ui-bootstrap:popover-trigger 是无效属性
- mysql - 如何获取在 MySQL 中没有连接匹配的查询结果?
- javascript - 在 Angular Typescript 中显示函数的返回值
- jquery - 调用 clearInterval 后如何使 setInterval 重新开始