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

別のアプローチの一種ですが、設定アプリケーション内のページにリンクすることもできます。おそらく、プライマリページにリンクして、必要な変更をユーザーに伝えることができます。

于 2012-04-03T19:29:36.007 に答える
0

別の解決策として、 https://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.htmlのような接続タイプを検出できる可能性があります。デバイスタイプをさらにチェックすることで、ユーザーが行動する必要がある場合にのみユーザーに警告することができます。

于 2012-04-03T17:13:55.023 に答える
0

これを行う方法はないようです。

于 2012-04-04T11:58:59.500 に答える