我知道可以通过iphone中的内置设置检查wifi和数据的流量使用情况。但是有没有像图书馆或函数这样的解决方案来获取设备的实时网络使用(上传/下载)? (就像一个实时的netstat)
此应用程序执行类似的操作: https://itunes.apple.com/us/app/data-control-manage-data-usage/id390646992?mt=8
有谁知道要拨打什么课程或者查找某种方法来访问实时流量?
我希望我的问题是可以理解的。
答案 0 :(得分:0)
在iOS中没有这样的API,您提到的应用程序(以及所有类似的应用程序)依赖于运营商提供的API(或解析运营商网站)。如果你想实现这种应用程序,我担心你必须为你感兴趣的每个可能的运营商找到一些东西。
答案 1 :(得分:0)
没有高级API支持这一点,但由于iOS只是一个相当漂亮的unix,你当然可以使用标准的API。
在这种情况下,您将寻找getifaddrs,它会检索描述设备上各种接口的内存结构。
然后,您必须解析这些C结构,以获取所需的接口详细信息。
getifaddr接口 记录(man getifaddr),因此您可以使用它。
我会添加一些代码,但首先要注意几点。 Apple并不打算保留这些东西,所以网络数量是32位,所以你必须处理4Gb翻转。 数据包计数大部分在那里,我认为tx数据包总数为0,但是无论如何谁对数据包计数感兴趣。
您可以通过搜索getifaddrs找到更好的代码,但这里有一个简短的版本可以帮助您入门。
#include <sys/types.h>
#include <sys/sysctl.h>
#include <sys/socket.h>
#include <ifaddrs.h>
#include <net/if_var.h>
struct ifaddrs* addrs;
int getIFAddrsResult = getifaddrs(&addrs);
if (getIFAddrsResult == 0)
{
struct ifaddrs* addrsPtr = addrs; // need to keep original for freeifaddrs
while (addrsPtr != NULL)
{
NSString *name = [NSString stringWithFormat:@"%s",addrsPtr->ifa_name];
//NSLog(@"ifa_name %s == %@\n", cursor->ifa_name,name);
// names of interfaces: en0 is WiFi ,pdp_ip0 is WWAN
if (addrsPtr->ifa_addr->sa_family == AF_LINK)
{
const struct if_data* stats = (const struct if_data *) addrsPtr->ifa_data;
// We only consider the active data interface, and that will normally be the '0' interface.
if ([name isEqualToString:@"en0"])
{
// Wifi
// look at stats->ifi_obytes & ifi_ibytes
} else if ([name isEqualToString:@"pdp_ip0"])
{
// mobile broad band
} else {
// could be bluetooth, usb, ad hoc wifi, out of band signalling...
}
}
addrsPtr = addrsPtr->ifa_next;
}
freeifaddrs(addrs);
} else {
NSLog(@"getifaddrs failed with error : %s", strerror(getIFAddrsResult));
return nil;
}
P.S。我要去钻石复活老问题徽章:))