是否有(合法)方式捕获iOS下的整个屏幕?

时间:2012-04-03 16:32:39

标签: ios wifi ipod-touch noise airplane

我尝试了几种技术来捕获该应用内的应用截图。这些技术似乎都没有捕获状态栏 - 它最终变黑了。

显然曾经有一种方法可以做到这一点,但该界面是内部的,Apple不会让你使用它。

有什么想法吗?

注意:这是尝试解决this problem,我需要确定飞机模式是打开还是关闭(不,只是知道网络是否可达是不够的)。

然而,似乎这个问题更具普遍意义,并且与该问题截然不同。

5 个答案:

答案 0 :(得分:6)

您可以使用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");

答案 1 :(得分:2)

此时似乎很清楚,没有简单的方法可以检测是否启用了飞行模式。虽然您可以通过查看低级网络堆栈信息或抓取状态栏像素来推断它,但任何一种方法都依赖于未记录的行为。很有可能在将来发布的iOS或未来的iOS设备上,行为会发生变化,而且您的代码会产生误报或误报。

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

如果我在你的鞋子里,我会:

  1. File a bug to let Apple know you want this feature.

  2. 无论是否启用了飞行模式,都会将通知应用到应用程序中。是的,如果用户启用了它可能会有点烦人,但整体伤害很小。我可能会将此警报设置为仅弹出一次(在NSUserDefaults中存储密钥以指示其是否已显示)。

  3. 如果您想获得超级想象力,请分析录制的音频,如果检测到嗡嗡声,请在录制时再次提醒用户启用飞行模式。您可以实时执行此操作,也可以在录制剪辑后执行此操作,无论您的应用程序更有意义。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

似乎无法做到这一点。