【问题标题】:Is there a (legal) way to capture the ENTIRE screen under iOS?是否有(合法)方法可以在 iOS 下捕获整个屏幕?
【发布时间】:2012-04-17 08:39:03
【问题描述】:

我尝试了几种技术来从该应用中捕获该应用的屏幕截图。似乎没有一种技术可以捕获状态栏——它最终是黑色的。

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

有什么想法吗?

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

但是,这个问题似乎更普遍,并且与那个问题不同。

【问题讨论】:

  • 因为(叹气)我需要捕获状态栏,以便查看它并查看是否启用了飞行模式,因为没有其他方法可以做到这一点。如果在第二代 iPod Touch 上运行,我需要这样做以警告用户启用飞行模式,否则 WIFI 在录制时会产生音频噪音。
  • +1 用于跳出框框思考以了解飞行模式的状态。 +更多,如果您列出您尝试捕获屏幕的其他解决方案
  • 所以你实际上关心的只是网络活动的可能性;为什么不检查“可达性”? SCNetworkReachabilityGetFlags()
  • @IuliusCæsar -- 我需要 WIFI 关闭,而不是简单地无法访问。
  • 为了帮助搜索类似问题的人,请更新您的问题以指明实际问题(确定 WiFi 状态)。

标签: ios wifi ipod-touch noise airplane


【解决方案1】:

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

【讨论】:

  • if.h 中的一堆未定义类型
  • 缺少哪些类型?可能是您需要包含的另一个标题。
  • 一个看起来像 sockaddr。
  • 现在试试;我添加了一个缺少的标题。套接字函数和类型分布在许多文件中,找到所有正确的标头可能会很痛苦。
  • 在飞行模式下,en0 显示 (1x) 并运行 (40x) -- 8863x。
【解决方案2】:

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

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

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

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

  2. 无论是否启用飞行模式,都将通知放入应用程序。是的,如果启用它可能会让用户有点恼火,但总体危害是最小的。我可能会将此设置为仅弹出一次的警报(在 NSUserDefaults 中存储一个键以指示其是否已显示)。

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2014-01-03
          • 1970-01-01
          • 2017-03-15
          • 2012-04-19
          • 1970-01-01
          • 1970-01-01
          • 2012-06-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多