0

私のアプリケーションでは、ユーザーの iPhone をサード パーティのハードウェア デバイスに接続する必要があります。サード パーティのハードウェア デバイスは、製品名 (常に同じ) とそれに続くユニット番号 (つまり、ProductName_123) を含む SSID をブロードキャストします。基本的にキャプティブ ネットワークです。ユーザーがアプリケーションを操作できるようにする前に、iPhone が現在適切な SSID に接続されていることを確認します。私は次の方法でこれを行います (プライバシー上の理由から製品名を難読化しています)。

- (BOOL) connectedToHardwareDevice
{

    /* Retrieve Interface Information */
    CFArrayRef myArray = CNCopySupportedInterfaces();
    CFDictionaryRef captiveNtwrkDict = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0));

    /* Put network information into an iterable dictionary */
    NSDictionary *dict = ( NSDictionary*) captiveNtwrkDict;
    NSString* ssid = [dict objectForKey:@"SSID"];

    /* Look for the Hardware Device name in the SSID */
    rangeOfString:@"ProductName"].location == NSNotFound || ssid == NULL)
    {      
        return false;
    }
   else
    {        
        return true;
    }    
}

iPhone のワイヤレス ネットワーク設定で、テスト デバイスの静的 IP を宣言しました。これにより、DHCP が回避されるため、接続手順が速くなります。ただし、多くの場合、アプリケーションを開くと、「接続されていません」というアラートが表示されます。これは、前述のメソッドが false を返すことによってトリガーされます。ビューのテキスト フィールドを現在の SSID で更新することを考えると、これは非常に奇妙だと思います。これは、アラートが表示されているにもかかわらず、通常は正しいものです。

私の質問は次のとおりです。私の目標を達成するためのより信頼できる手段はありますか? 私はこれについて間違っていますか?より信頼性の高い結果を得るために変更できる方法の一部はありますか?

ありがとうございました!追加情報が必要な場合は、お気軽にお問い合わせください。

4

1 に答える 1

0

私の解決策は、カウンターが 20 に達するまでメソッドを再度実行することです。カウンターが 20 に達しても SSID がまだ一致しない場合は、ユーザーがハードウェア デバイスに接続されていないと想定し、「WiFi 接続の待機」ループに入ります。 . これは最も優雅ではないかもしれませんが、うまくいきます。

于 2012-10-14T23:14:01.787 に答える