我尝试了几种技术来捕获该应用内的应用截图。这些技术似乎都没有捕获状态栏 - 它最终变黑了。
显然曾经有一种方法可以做到这一点,但该界面是内部的,Apple不会让你使用它。
有什么想法吗?
注意:这是尝试解决this problem,我需要确定飞机模式是打开还是关闭(不,只是知道网络是否可达是不够的)。
然而,似乎这个问题更具普遍意义,并且与该问题截然不同。
答案 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设备上,行为会发生变化,而且您的代码会产生误报或误报。
(更不用说,在未来的设备上,干扰甚至可能不存在。)
如果我在你的鞋子里,我会:
无论是否启用了飞行模式,都会将通知应用到应用程序中。是的,如果用户启用了它可能会有点烦人,但整体伤害很小。我可能会将此警报设置为仅弹出一次(在NSUserDefaults中存储密钥以指示其是否已显示)。
如果您想获得超级想象力,请分析录制的音频,如果检测到嗡嗡声,请在录制时再次提醒用户启用飞行模式。您可以实时执行此操作,也可以在录制剪辑后执行此操作,无论您的应用程序更有意义。
答案 2 :(得分:0)
作为替代解决方案,您可以检测连接类型,类似于:https://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html。通过对设备类型的一些额外检查,您可以仅在他们需要采取行动的情况下警告用户。
答案 3 :(得分:0)
有一种不同的方法,但您也可以链接到“设置”应用程序中的页面。您也许可以链接到主页面并告诉用户您需要的更改。
答案 4 :(得分:0)
似乎无法做到这一点。