美文网首页
判断当前app是否被禁止使用网络

判断当前app是否被禁止使用网络

作者: Hawley | 来源:发表于2017-04-28 17:16 被阅读0次

之前看到某款app,当我开着4G网络但是禁止该app访问网络时,该app会提示我前往设置页面开启数据访问权限,后来在一本书上找到了一个解决方案。

原理其实不难,首先导入头文件<objc/message.h>,状态栏是由当前app控制的,获取当前app后遍历所有属性,找到关于状态栏的

    UIApplication *app = [UIApplication sharedApplication];
    unsigned int outCount = 0;
    Ivar *ivars = class_copyIvarList(app.class, &outCount);
    for (int i = 0; i < outCount; i++) {
        Ivar ivar = ivars[i];
        printf("|%s \n", ivar_getName(ivar));
    }
lvarList

输出得到app的所有属性和变量,很明显statusBar就是状态栏的,然后我们一层层往下剥,这里我就不一一赘述了,最后获取到的dataNetworkType就是当前网络状态

    UIApplication *application = [UIApplication sharedApplication];
    NSArray *children = [[[application valueForKeyPath:@"statusBar"] valueForKeyPath:@"foregroundView"] subviews];
    for (id child in children) {
        if ([child isKindOfClass:NSClassFromString(@"UIStatusBarDataNetworkItemView")]) {
            id type = [child valueForKeyPath:@"dataNetworkType"];
            NSLog(@" type class is %@, value is %@", [type class], type);
            }
    }

经过测试,发现,可能的值为 1,2,3,5 分别对应的网络状态是2G、3G、4G及WIFI。 当没有网络时,隐藏UIStatusBarDataNetworkItemView,无法获取dataNetworkType值。

相关文章

网友评论

      本文标题:判断当前app是否被禁止使用网络

      本文链接:https://www.haomeiwen.com/subject/mvknzttx.html