【问题标题】:Checking mobile network and forced to connect mobile network in Android在Android中检查移动网络并强制连接移动网络
【发布时间】:2014-02-24 13:27:45
【问题描述】:

我在程序中检查了移动网络连接,并关注了link 中的讨论。我的代码如下。

        boolean internet_flag = true;
        ConnectivityManager conMgr = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo mobile = conMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
        if (!mobile .isAvailable())
        {
            internet_flag = false;
        }

        if(internet_flag == false)
        {
            Toast.makeText(this, "Internet connection is down, please check netwrok connection", Toast.LENGTH_LONG)
            .show();            

        }

我在手机上关闭了移动数据,并且我的 wifi 连接到基于 WiFi 的 SD 卡读卡器设备(所以我确定我没有互联网连接),但我仍然有 internet_flag == true。 我的问题是

(1)为什么我关闭了 internet_flag == true。

(2)我想了解Android中的互联网连接。根据这个discussion,当Wifi打开时,3G会自动关闭(它仍然是真的吗?)。在讨论中,为了恢复 3G 连接,再次关闭 Wifi。就我而言,我无法关闭 Wifi,因为我已将它连接到 SD 卡读卡器,但我仍然想强制连接到 3G 连接。我怎样才能做到这一点?可能的 谢谢

【问题讨论】:

  • 你试过mobile.isConnected().??
  • 在所有条件下返回 false。

标签: android android-wifi


【解决方案1】:

试试这个方法(作为上下文,你可以给应用程序的上下文或活动一个):

public static boolean isNetworkAvailable(Context context) {
            ConnectivityManager connectivityManager = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo activeNetworkInfo = connectivityManager
                    .getActiveNetworkInfo();
            return activeNetworkInfo != null
                    && activeNetworkInfo.isConnectedOrConnecting();
        }

要启用wifi,您可以使用它

public static void enableWifi(Context context) {
    WifiManager wifi = (WifiManager) context
            .getSystemService(Context.WIFI_SERVICE);
    if (!wifi.isWifiEnabled()) {
        wifi.setWifiEnabled(true);
    }
}

您应该在清单中添加一些权限:

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

 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />

【讨论】:

  • 还是一样。如果我同时关闭 wifi 和 3G。是的,连接是错误的。但如果我的 wifi 连接到某个设备(该设备没有互联网连接),则返回仍然为 true。
  • 在第一个方法中尝试这个(将返回更改为这个):return connectivityManager.getActiveNetworkInfo().isConnected() && connectivityManager.getActiveNetworkInfo().isAvailable() && connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting (); //现在你正在认真检查一切......
  • 如果我都关闭了,它返回 false。如果我可以通过 Wifi 访问设备(没有互连),它会返回 true。所以无法检查设备是否可以上网。
  • 太棒了!!!我希望你能找到一些东西:) 因为这个:connectivityManager.getActiveNetworkInfo().isConnected() 只有当你有连接时才应该是真的......祝你好运
  • 我如何通过 wifi 访问设备上的 sdcard 是通过 tcp/ip 协议。扫描所有连接的可用设备并获取设备的 IP 地址。通过那个基于 ip 地址的 url,我访问了 sdcard 并下载了文件。那时,没有互联网接入外界。在那种情况下,connectivityManager 认为设备有网络连接吗?可能我应该只检查 3G 连接。由于wifi已连接,3G已断开。
猜你喜欢
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-02
  • 1970-01-01
  • 2012-07-25
相关资源
最近更新 更多