4

iOSフレームワーク内で、Wifi無線がユーザーによって有効にされているかどうかをどのように確認できますか?私はWifiを介した到達可能性ではなく、ユーザーがデバイスの電源を切っているかどうかに関心があることに注意してください。ありがとう。

4

6 に答える 6

10

基: http://www.enigmaticape.com/blog/determine-wifi-enabled-ios-one-weird-trick

Wifi ステータスは、C ベースの ifaddress 構造体を使用してオン/オフであると判断できます。

ifaddrs.h、および

ネット/if.h

【コード出典:不明】

- (BOOL) isWiFiEnabled {

    NSCountedSet * cset = [NSCountedSet new];

    struct ifaddrs *interfaces;

    if( ! getifaddrs(&interfaces) ) {
        for( struct ifaddrs *interface = interfaces; interface; interface = interface->ifa_next) {
            if ( (interface->ifa_flags & IFF_UP) == IFF_UP ) {
                [cset addObject:[NSString stringWithUTF8String:interface->ifa_name]];
            }
        }
    }

    return [cset countForObject:@"awdl0"] > 1 ? YES : NO;
}

Swift 3 バージョン (ブリッジ ヘッダーと が必要#include <ifaddrs.h>):

func isWifiEnabled() -> Bool {
    var addresses = [String]()

    var ifaddr : UnsafeMutablePointer<ifaddrs>?
    guard getifaddrs(&ifaddr) == 0 else { return false }
    guard let firstAddr = ifaddr else { return false }

    for ptr in sequence(first: firstAddr, next: { $0.pointee.ifa_next }) {
        addresses.append(String(cString: ptr.pointee.ifa_name))
    }

    freeifaddrs(ifaddr)
    return addresses.contains("awdl0")
}
于 2014-09-21T05:57:09.923 に答える
6

@magma のコメントで述べたように、Reachability ソース コードを使用する必要がある場合があります。これまでのところ、私の経験と他の人が話していることに基づいて、ユーザーが設定で Wi-Fi をオフにしているかどうかを示すブール値はありません。デバイスがインターネットに接続できるかどうかを確認することで、ユーザーが Wi-Fi をオフにしたと推測して結論付ける (仮定する)だけで済みます。

于 2012-10-16T01:50:53.260 に答える
4

到達可能性を使用するのが正しい方法です。

App Store に掲載する必要があるアプリ内の直接設定にアクセスすることはできません。これは、アプリが対処する理由がまったくないプライベート ユーザー領域と見なされます。

しかし、これ以上説明しないと、設定を調べる必要があるとは思えません。

これは、アプリが関心を持ったり心配したりする必要はありません。ネットワークにアクセスできるか、ネットワークにアクセスできません。何も利用できない場合、その理由は重要ではありません。

「フォードはありませんか?」というような質問はしません。「あなたはBMWを持っていませんか?」. 優れたアプリケーション設計からではなく、「車はありますか?」と尋ねます。

また、Raechability はインターネットとは何の関係もありません。デバイスが理論的に TCP/IP ネットワーク経由で到達可能かどうかがわかります。これは、何らかのネットワーク通信が利用可能であることを意味します。次に、どのタイプかを確認できます (例: Wifi と 3G/LTE)。そして、それがまさに到達可能性の目的です。

なんらかの理由で、ラジオがオンになっていて、それが一種のエンタープライズ アプリ用である場合に、本当に停止したい場合は、プライベート フレームワークを調べてインポートし、ドキュメント化されていないメソッドに対処できます。アップデート。

Wifi の場合は次のようになります。/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/PrivateFrameworks/MobileWiFi.framework

于 2014-09-17T10:07:06.830 に答える