3

Windows phone7 では、次の一連の操作を続行する前に、インターネット接続が利用可能かどうかを確認する必要があります。多くの投稿で提案されている3つのオプションを検索して見つけました。それらは次のとおりです。

(a). bool isNetworkAvailable = NetworkInterface.GetIsNetworkAvailable();
(b). bool isNetworkAvailable = DeviceNetworkInformation.IsNetworkAvailable;
(c). bool isNetworkAvailable = (NetworkInterface.NetworkInterfaceType != NetworkInterfaceType.None);

(a) と (b) のオプションでは、WIFI がオフで、インターネット接続が利用できない場合でも、結果として TRUE が提供されます。ただし、(c) は、インターネットが利用できない場合に正確な (実際の) 結果を提供します。しかし、返信にはとても時間がかかります。それまでは申請が滞っています...

これらすべてを実際のデバイスで確認しましたが(エミュレータのみではありません)、デバイスのインターネットの可用性を確認するための最良の方法はどれでしょうか。

どんな提案でも大歓迎です...前もって感謝します.....

4

4 に答える 4

1

ネットワークが利用可能であることと、より広いインターネットに接続されていることを知ることには違いがあります。NetworkInterface.GetIsNetworkAvailable()非常に高速で、ネットワーク インターフェイスが無効になっている場合は false を返します。

ネットワークが利用可能であると返された場合、それは接続できることを示しているだけです。DNS ルックアップの速度、セルラー ネットワーク経由の接続 (WiFi 接続がない場合)、およびデバイスが接続されていないという潜在的な問題が依然として存在します。すでに接続されているなど

パフォーマンスの問題が発生している場合は、UI スレッドからネットワーク アクセスを移動することを検討する必要があります。

于 2012-06-01T12:27:32.000 に答える
1

では、これを使ってみましょう。私のプロジェクトには同じコンセプトがあり、次のことを行いました。それが役に立てば幸い。

  public bool netWorkAvailable()
    {
        if (NetworkInterface.GetIsNetworkAvailable())
        {
            Logger.log(TAG, "netWorkAvailable()");
            return true;
        }
        return false;
    }

 if (netWorkAvailable())
   {
     buffer.Append(SERVER_URL);
     buffer.Append("_req=").Append(8);
     httpConnection = new HttpConnection();
     httpConnection.connect(REQ_REGISTRATION, buffer.ToString(), listener, null);
     httpConnection.Post();
    }

すべての httpconnection を処理する別のクラスがあります。これらに加えて、プロジェクトの目的のために他のいくつかのこともチェックします。それらは次のとおりです。

public bool IsWifiAvailable()
    {
     if ((NetworkInterface.NetworkInterfaceType == NetworkInterfaceType.Wireless80211))
         {
          return true;
         }
     else
       {
        return false;
       }
    }

    public bool threeGkAvailable()
    {
        if ((NetworkInterface.NetworkInterfaceType == NetworkInterfaceType.MobileBroadbandCdma)
                  || (NetworkInterface.NetworkInterfaceType == NetworkInterfaceType.MobileBroadbandGsm))
        {
            return true;
        }
        else
        {
            return false;

        }
    }
于 2012-08-03T09:36:42.793 に答える
0

おそらくHttpWebRequest、既知のWebページにを送信して、応答の最初の数文字が意図した結果と一致するかどうかを確認することをお勧めします。また、接続テストが実際に結果(成功または失敗)を取得するポイントまで、このチェック機能を数回ループすることもできます。

これをUIスレッドから分離されたスレッドにロードして、試してみてください。例外を必ずキャッチしてください(接続の欠如やその他の問題のためにテストが機能しない場合)。私は実際にこれを私のWindowsPhone7アプリの1つで使用しましたが、それが最良のアイデアであるかどうかはわかりません。

于 2012-06-02T22:06:04.087 に答える
0

webclient を使用して Web ページをリクエストすることで、ユーザーがインターネットに接続されているかどうかを確認できます。

WebClient client = new WebClient();
        client.DownloadStringCompleted += (s, e) =>
        {
            if (e.Error == null && !e.Cancelled)
            {
                //completed.TrySetResult(true);
                MessageBox.Show("Internet Connected", "True", MessageBoxButton.OK);
            }
            else
            {
                //completed.TrySetResult(false);
                MessageBox.Show("Internet Not Connected", "False", MessageBoxButton.OK);
            }
        };
        client.DownloadStringAsync(new Uri("http://www.google.com/"));

また、非常に時間がかかる場合に備えて、20 秒間のタイムアウトを設定できます。

于 2015-05-12T07:53:09.637 に答える