2012-04-03 61 views
5

我已经尝试了几种技术从该应用程序中捕获应用程序的屏幕截图。这些技术似乎都没有捕获状态栏 - 它最终变成了黑色。有没有一种(合法的)方法来捕捉iOS下的整个屏幕?

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

任何想法?

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

但是,这个问题看起来似乎更具普遍性,并且与这个问题截然不同。

+0

你真的需要状态栏吗?因为你可以隐藏它并截图,在这种情况下,截图应该是完整的(我可能是错的,从来没有做过) – Novarg 2012-04-03 16:34:46

+0

是的,我需要状态栏。这就是我想要得到的图像。 – 2012-04-03 16:36:38

+0

为什么不直接询问用户呢? – CodaFi 2012-04-03 16:43:17

回答

0

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

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"); 
+0

if.h中有大量未定义的类型。 – 2012-04-03 20:01:14

+0

哪些类型丢失?可能是你需要包含的另一个头文件。 – 2012-04-03 20:03:02

+0

看起来像sockaddr,一个。 – 2012-04-03 20:04:36

2

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

(更不用提的是,在未来的设备,该干扰可能甚至不存在)

如果我是你的话,我想:

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

  2. 无论是否启用飞行模式,都可以将通知发送到应用程序。是的,如果启用该功能,用户可能会感到烦恼,但总体伤害很小。我可能会使这个警报只弹出一次(在NSUserDefaults中存储一个密钥以指示它是否已经显示)。

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

相关问题