5

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

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

有任何想法吗?

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

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

4

5 回答 5

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");
于 2012-04-03T19:41:37.387 回答
2

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

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

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

  1. 提交错误,让 Apple 知道您需要此功能。

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

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

于 2012-04-03T21:42:41.037 回答
0

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

于 2012-04-03T17:13:55.023 回答
0

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

于 2012-04-03T19:29:36.007 回答
0

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

于 2012-04-04T11:58:59.500 回答