有没有(合法的)方法可以在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设备上,行为会发生变化,您的代码会生成假阳性或假阴性

(更不用说,在未来的设备上,干扰甚至可能不存在。)

如果我处在你的位置,我会:

  • 将通知输入应用程序,无论是否启用飞行模式。是的,如果启用它,用户可能会觉得有点烦人,但总体危害是最小的。我可能会将此警报设置为只弹出一次(将密钥存储在NSUserDefaults中以指示其是否已显示)

  • 如果你想变得非常花哨,请分析录制的音频,如果检测到嗡嗡声,请在录制时再次提醒用户启用飞行模式。你可以实时或者在剪辑被录制后这样做,只要对你的应用程序更有意义


  • 似乎没有办法做到这一点。

    因为(叹气)我需要捕获状态栏,以便查看它并查看是否启用了飞行模式,因为没有其他方法可以做到这一点。我需要这样做,以警告用户在使用第二代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");