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