如何检测系统是否连接到ad hoc或基础设施wifi?

时间:2016-01-18 18:18:53

标签: android networking routing network-programming wifi

我正在开发一个应用程序,在启用下载之前检查连接是否可靠(基本上连接应该是基础设施wifi而不是数据包)但是如果用户是

  1. 使用ad hoc网络或
  2. 移动设备的互联网连接为WAP
  3. 然后在桌面上连接并开始下载,它仍然是不受欢迎的。有没有办法检测某些wifi连接是否实际上不是来自ad hoc或使用手机的WAP?

3 个答案:

答案 0 :(得分:3)

你可以检测到......

  1. ... Ad-Hoc网络通过检查您是否真的可以access a server on the internet - 通常,Ad-Hoc不包括完全连接,因此如果您有网络但无法访问互联网,则下载将无效< / LI>
  2. ...通过衡量请求的round-trip time来使用电话接入点 - 它们通常在移动宽带上非常高。

    long start = System.nanoTime();
    HttpGet requestForTest = new HttpGet("http://m.google.com");
    try {
        new DefaultHttpClient().execute(requestForTest); // can last...
    } 
    catch (Exception e) {
    }
    long rtt = System.nanoTime() - start;
    // ... evaluate the rtt
    

    此表可能与评估相关(source

    Generation | Data rate      | Latency
    2G         | 100–400 Kbit/s | 300–1000 ms
    3G         | 0.5–5 Mbit/s   | 100–500 ms
    4G         | 1–50 Mbit/s    | < 100 ms
    
  3. 除了这两个选项之外:为什么要专门禁止Ad-Hoc或移动宽带?你不应该

    • 禁止任何内容并让用户决定是否要等待多年

    • 禁止所有慢速连接,即监控传输速率几秒钟,如果太小则自动取消下载

答案 1 :(得分:1)

基本上,您正在ISO / OSI模型的第7层编写应用程序,并且您想知道第2层的内容。这显然不是它应该如何工作。

  • 如果您的下载很大,您应该保护用户不要烧毁他们的移动合同的数据量,并在执行下载之前通知用户。
    这也是Google Play商店如何处理大于几MB的下载量。
  • 您可以在应用的偏好设置中选择仅允许在使用Wi-Fi时下载,以便用户可以确保保存其数据计划。
  • 如果你绝对不希望用户通过移动网络下载你的文件,只需允许Wi-Fi,然后做一个pind和1MB文件的下载来测量带宽,然后再决定实际下载是否会永远或不。

所有其余的都应该由系统处理,不需要关心你。

答案 2 :(得分:-2)

检查它是否连接到wifi:

ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

if (wifi.isConnected()) {
    // is connected to wifi
}

不要忘记将权限添加到清单:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>