如何通过程序处理WiFi和移动网络的切换?

4

目前,我有一个与WiFi配合工作的应用程序,但是当我切换到移动网络时,我的应用程序无法正常工作。我已经维护了一个后台服务来检查网络,但是我不知道如何处理网络从WiFi切换到移动网络以及从移动网络切换到WiFi的情况。因为WiFi已经启用,而且我不在WiFi覆盖范围内,所以我不知道如何处理从WiFi到移动网络的切换;在这种情况下,我希望能够自动切换到移动网络,反之亦然。我的方法如下,但并未奏效:

String networkStatus = "disconnected";
            int netType = 0;
            try{
            ConnectivityManager connectivityManager =  (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
            if(connectivityManager != null ){
                    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();

                    if(networkInfo != null){
                        netType = networkInfo.getType();
                        Log.d("Log", "connetion is available");
                    }else {
                        Log.d("Log", "connetion is  not available");
                        return networkStatus;
                    }

                //  if(networkInfo.isAvailable()){  // Old one
if(networkInfo.isAvailable() && networkInfo.isConnected()){  // New change added here
                        if(netType == ConnectivityManager.TYPE_WIFI)
                            {}
                        else if(netType == ConnectivityManager.TYPE_MOBILE )
                            {}
                            }
                        }
                    }catch(Exception e){
            Log.d("Log", "checkNetworkConnection" + e.toString());
            return networkStatus;
        }

我已经在这里阅读了很多帖子,但仍然没有想法。是否有人可以给我任何想法或url,以便我可以获得相同的实现方法?

提前致谢。

2个回答

6
我有解决方案:
String networkStatus = "disconnected";
            int netType = 0;
            try{
            ConnectivityManager connectivityManager =  (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
            if(connectivityManager != null ){
                    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();

                    if(networkInfo != null){
                        netType = networkInfo.getType();
                        Log.d("Log", "connetion is available");
                    }else {
                        Log.d("Log", "connetion is  not available");
                        return networkStatus;
                    }

                //  if(networkInfo.isAvailable()){  // Old one
if(networkInfo.isAvailable() && networkInfo.isConnected()){  // New change added here
                        if(netType == ConnectivityManager.TYPE_WIFI)
                            {}
                        else if(netType == ConnectivityManager.TYPE_MOBILE )
                            {}
                            }
                        }
                    }catch(Exception e){
            Log.d("Log", "checkNetworkConnection" + e.toString());
            return networkStatus;
        }

-1

1
这应该是一个注释。 - Logic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接