有没有一种(合法的)方法可以在iOS下捕捉整个屏幕



我尝试了几种技术来从应用程序中捕获应用程序的屏幕截图。这些技术似乎都没有捕捉到状态栏——它最终变成了黑色。

显然曾经有一种方法可以做到这一点,但该接口是内部的,苹果不会让你使用它

有什么想法吗?

注意:这是为了解决这个问题,我需要确定飞机模式是打开还是关闭(不,仅仅知道网络是否可用是不够的)。

然而,这个问题似乎更具普遍性,而且与那个问题不同。

确定网络接口是否处于活动状态的实际问题可以通过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;
}

使用此功能:

BOOL isWWANEnabled = IsNICTurnedOn("pdp_ip0");
BOOL isWiFiEnabled = IsNICTurnedOn("en0");

在这一点上,似乎没有简单的方法来检测是否启用了飞行模式。尽管您可能可以通过查看低级网络堆栈信息或抓取状态栏像素来推断它,但这两种方法都将依赖于未记录的行为。很可能在未来的iOS版本或未来的iOS设备上,行为会发生变化,您的代码会生成假阳性或假阴性。

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

如果我站在你的立场上,我会:

  1. 提交一个bug,让苹果知道你想要这个功能。

  2. 将通知输入应用程序,无论是否启用飞行模式。是的,如果启用了它,用户可能会觉得有点烦人,但总体危害很小。我可能会让它成为一个只弹出一次的警报(在NSUserDefaults中存储一个密钥来指示它是否已经显示)。

  3. 如果你想获得超级快感,请分析录制的音频,如果检测到嗡嗡声,请在录制时再次提醒用户启用飞行模式。你可以实时或在剪辑录制后这样做,无论什么对你的应用程序都更有意义。

作为一种替代解决方案,也许您可以检测连接类型,类似于:https://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html。通过对设备类型进行一些额外的检查,您可以只在用户需要采取行动的情况下警告用户。

这是一种不同的方法,但您也可以链接到Settings应用程序中的页面。您也许可以链接到主页并告诉用户您需要的更改。

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

最新更新