有没有(合法的)方法可以在iOS下捕获整个屏幕?
我尝试了几种技术从应用程序中捕获应用程序的屏幕截图。所有这些技术似乎都无法捕获状态栏——它最终会变成黑色 显然曾经有一种方法可以做到这一点,但该界面是内部的,苹果不会让你使用它 有什么想法吗 注意:这是一个试图解决的问题,我需要确定飞机模式是开还是关(不,仅仅知道网络是否可访问是不够的)有没有(合法的)方法可以在iOS下捕获整个屏幕?,ios,wifi,ipod-touch,noise,airplane,Ios,Wifi,Ipod Touch,Noise,Airplane,我尝试了几种技术从应用程序中捕获应用程序的屏幕截图。所有这些技术似乎都无法捕获状态栏——它最终会变成黑色 显然曾经有一种方法可以做到这一点,但该界面是内部的,苹果不会让你使用它 有什么想法吗 注意:这是一个试图解决的问题,我需要确定飞机模式是开还是关(不,仅仅知道网络是否可访问是不够的) 但是,这个问题似乎更为普遍,并且与该问题不同。作为替代解决方案,您可能可以检测连接类型,类似于:。通过对设备类型进行一些额外检查,您可以仅在用户需要采取行动时警告用户。这是一种不同的方法,但您也可以链接到设置应
但是,这个问题似乎更为普遍,并且与该问题不同。作为替代解决方案,您可能可以检测连接类型,类似于:。通过对设备类型进行一些额外检查,您可以仅在用户需要采取行动时警告用户。这是一种不同的方法,但您也可以链接到设置应用程序中的页面。您可以链接到主页并告诉用户您需要的更改。您的实际问题,即确定网络接口是否处于活动状态,可以通过BSD网络功能解决。瞧
#include <sys/socket.h>
#include <ifaddrs.h>
#include <net/if.h>
BOOL IsNICTurnedOn(const char *nicName) {
BOOL result = NO;
struct ifaddrs *addrs = NULL;
if (0 == getifaddrs(&addrs)) {
for (struct ifaddrs *addr = addrs; addr != NULL; addr = addr->ifa_next) {
if (0 == strcmp(addr->ifa_name, nicName)) {
result = (0 != (addr->ifa_flags & (IFF_UP | IFF_RUNNING)));
break;
}
}
freeifaddrs(addrs);
}
return result;
}
在这一点上,似乎很清楚,没有简单的方法来检测飞机模式是否启用。尽管您可能通过查看低级网络堆栈信息或刮取状态栏像素来推断,但这两种方法都依赖于未记录的行为。很有可能在未来的iOS版本或未来的iOS设备上,行为会发生变化,您的代码会生成假阳性或假阴性 (更不用说,在未来的设备上,干扰甚至可能不存在。) 如果我处在你的位置,我会:
似乎没有办法做到这一点。因为(叹气)我需要捕获状态栏,以便查看它并查看是否启用了飞行模式,因为没有其他方法可以做到这一点。我需要这样做,以警告用户在使用第二代iPod Touch时启用飞行模式,否则WIFI在录制时会产生音频噪音。+1用于跳出框框了解飞行模式的状态+如果你列出了你试图捕获屏幕的其他解决方案,那么你真正关心的是没有网络活动的可能性;为什么不检查“可达性”
SCNetworkReachabilityGetFlags()
@IuliusCæsar——我需要关闭WIFI,而不仅仅是无法访问。为了帮助人们考虑类似问题进行搜索,请更新您的问题,以指示实际问题(确定WIFI状态)。if.h中有一堆未定义的类型。缺少哪些类型?可能是您需要包含的另一个标题。例如,看起来像sockaddr。请立即尝试;我添加了一个缺少的标题。套接字函数和类型分布在许多文件中,要找到所有正确的头文件可能会很困难。在飞行模式下,en0显示(1x)并运行(40x)--8863x。
BOOL isWWANEnabled = IsNICTurnedOn("pdp_ip0");
BOOL isWiFiEnabled = IsNICTurnedOn("en0");