0

我在 android 操作系统中发现了一些有趣的东西,我想在自己的应用程序中使用它们,但是如何使用呢?

就像在 ConnectivityManager http://developer.android.com/reference/android/net/ConnectivityManager.html中一样,您会看到如下状态代码

public static int TYPE_WIFI = 1;

当您使用此代码调用连接管理器时:

ConnectivityManager mConnectivityManager = (ConnectivityManager) getSystemService(Connectivity_Service);
NetworkInfo iswifi = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (iswifi.isConnected()){ msg = "You got WIFI!"}

但是如果我有一门课需要说明我是否有互联网连接,我怎么能让它返回这样的状态码?

已经感谢您的回答!:)

伍特

4

2 回答 2

0

创建一个网络检查器类:

public class NetWorkCheck{
    ConnectivityManager connectivityManager;
    NetworkInfo iswifi,mobileInfo;

    public String checkNow(Context con){

        try{
            connectivityManager = (ConnectivityManager) 
                             con.getSystemService(Context.CONNECTIVITY_SERVICE);
            iswifi  = connectivityManager.getNetworkInfo(
                                          ConnectivityManager.TYPE_WIFI);
            mobileInfo = connectivityManager.getNetworkInfo(
                                        ConnectivityManager.TYPE_MOBILE);
        if(wifiInfo.isConnected())
            return "You got WIFI!";
        else {
               if( mobileInfo.isConnected()){
                return "You got TYPE_MOBILE!";
               }
               {
                 return "WIFI or TYPE_MOBILE Connectivity Problem!";
               }
            }
        }
        catch(Exception e){
            return "CheckConnectivity Exception";
        }
    }
}

在活动中,您可以使用此类检查 wifi:

NetWorkCheck ntw = new NetWorkCheck();
String meg_wifi = ntw.checkNow(getApplicationContext());
于 2012-11-03T20:12:32.023 回答
0

这里是简单的版本:

/*@return boolean return true if the application can access the internet*/
public static boolean haveInternet(Context context){
    NetworkInfo info = ((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
    if (info==null || !info.isConnected()) {
        return false;
    }
    if (info.isRoaming()) {
        // here is the roaming option you can change it if you want to disable internet while roaming, just return false
        return true;
    }
    return true;
}

在这里,您可以使用 wifi 的首选项,您可以指定是否希望某些操作受到设置为仅使用 wifi 的首选项的限制。例如,您可以使用 withRoamingPref = false; 检查小型下载。对任何互联网连接返回 true。然后使用 withRoamingPref = true 检查大型下载,在这种情况下,它将检查用户是否启用了“仅 wifi”来下载它们,如果使用 wifi,则返回 true;如果用户允许移动连接下载,则返回 true,返回 false如果没有互联网连接,或者您使用移动连接并且用户已禁用它以下载大量文件。

public static boolean haveInternet(Context context, boolean withRoamingPref){
    NetworkInfo info = ((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
    if (info==null || !info.isConnected()) {
        return false;
    }
    if (info.isRoaming()) {
        // here is the roaming option you can change it if you want to disable internet while roaming, just return false
        if(withRoamingPref) {
            SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
            boolean onlyWifi = settings.getBoolean("onlyWifi", false);

            if (onlyWifi) {
                return false;

            }else{
                return true;
            }

        }else{
            return true;
        }
    }
    return true;
}

修改案例以返回所有三种状态并决定如何对应用程序的另一部分进行操作:

/*@return int return 0 if the application can't access the internet
    return 1 if on mobile data or 2 if using wifi connection*/
public static int haveInternet(Context context){
    NetworkInfo info = ((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
    if (info==null || !info.isConnected()) {
        return 0;
    }
    if (info.isRoaming()) {
        return 1;
    }else{
        return 2;
    }
}

PS:而不是数字,您应该为每个状态分配一个静态 int,然后返回它而不是原始 int。例如,在类的开头声明:

公共静态 int INTERNET_DISABLED = 0;

然后代替“返回0;” 您将使用“返回 INTERNET_DISABLED;”

这样您就不必记住每个数字的含义,您将根据名称检查应用程序的其他部分,如下所示:

if(myClass.haveInternet == myClass.INTERNET_DISABLED){
     //TODO show no internet message
}
于 2012-11-03T20:15:06.740 回答