欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android判断是否有网

程序员文章站 2022-05-19 18:55:59
...

新项目中需要判断一下是否现在联网,没有联网的状态读取本地存储,
导入工具类,判断现在的状态是否联网

package com.feng.savatest;


import android.content.Context;
import android.location.LocationManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.widget.Toast;

public class StateTest {
 public static final String NETWORK_IS_NOT_TO_FORCE = "网络不给力";
    /**
     * 判断网络连接是否可用
     */
    public static boolean isNetworkAvailable(Context context){
        ConnectivityManager cm=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if(cm == null){
            Toast.makeText(context, Constant.NETWORK_IS_NOT_TO_FORCE, Toast.LENGTH_SHORT).show();}else {
            //如果仅仅是用来判断网络连接
            //则可以使用 cm.getActiveNetworkInfo().isAvailable();  
            NetworkInfo[] info=cm.getAllNetworkInfo();
            if(info != null){
                for(int i=0;i<info.length;i++){
                    if(info[i].getState() == NetworkInfo.State.CONNECTED){
                        return true;
                    }
                }
            }
        }
        return false;
    }


    /**
     * 判断是wifi还是3g网络,用户的体现性在这里了,wifi就可以建议下载或者在线播放。
     */
    public static boolean isWifi(Context context) {   
        ConnectivityManager cm = (ConnectivityManager) context   
                .getSystemService(Context.CONNECTIVITY_SERVICE);   
        NetworkInfo networkINfo = cm.getActiveNetworkInfo();   
        if (networkINfo != null   
                && networkINfo.getType() == ConnectivityManager.TYPE_WIFI) {   
            Toast.makeText(context, "是wifi", Toast.LENGTH_SHORT).show();
            return true;   
        }   
        Toast.makeText(context, "不是wifi", Toast.LENGTH_SHORT).show();
        return false;   
    }


    /***
     * 判断WIFI是否打开
     */
    public static boolean isWifiEnabled(Context context) {
        ConnectivityManager connectivity = (ConnectivityManager) context   
                .getSystemService(Context.CONNECTIVITY_SERVICE);   
        if (connectivity != null) {   
            NetworkInfo[] info = connectivity.getAllNetworkInfo();   
            if (info != null) {   
                for (int i = 0; i < info.length; i++) {   
                    if (info[i].getTypeName().equals("WIFI") && info[i].isConnected()) {

                        Toast.makeText(context, Constant.WIFI_IS_OK, Toast.LENGTH_SHORT).show();
                        return true;   
                    }   
                }   
            }   
        }     Toast.makeText(context,  Constant.WIFI_IS_NO, Toast.LENGTH_SHORT).show();
        return false;   
    }   

    /**
     * 判断是否是3G网络
     */
    public static boolean is3rd(Context context) {   
        ConnectivityManager cm = (ConnectivityManager) context   
                .getSystemService(Context.CONNECTIVITY_SERVICE);   
        NetworkInfo networkINfo = cm.getActiveNetworkInfo();   
        if (networkINfo != null   
                && networkINfo.getType() == ConnectivityManager.TYPE_MOBILE) {   
            Toast.makeText(context, "是3G", Toast.LENGTH_SHORT).show();
            return true;   
        }   
        Toast.makeText(context, "不是3G", Toast.LENGTH_SHORT).show();
        return false;   
    }  


    /**
     * 判断GPS是否打开
     */
    public static boolean isGpsEnabled(Context context) {   
        LocationManager locationManager   
        = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);  
        // 通过GPS卫星定位,定位级别可以精确到街(通过24颗卫星定位,在室外和空旷的地方定位准确、速度快)  
        boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);  
        // 通过WLAN或移动网络(3G/2G)确定的位置(也称作AGPS,辅助GPS定位。主要用于在室内或遮盖物(建筑群或茂密的深林等)密集的地方定位)  
        //   boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);  
        if (gps) { 
            Toast.makeText(context,Constant.GPS_IS_OK, Toast.LENGTH_SHORT).show();
            return true;  
        }  
        Toast.makeText(context, Constant.GPS_IS_NO, Toast.LENGTH_SHORT).show();
        return false;    
    } 
}

用第一个方法就好了,
在代码中引用方法判断是否有网

  bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(StateTest.isNetworkAvailable(MainActivity.this)){
                    Toast.makeText(MainActivity.this,"现在有网",Toast.LENGTH_SHORT).show();
                }else {
                    Toast.makeText(MainActivity.this,"当前无网络状态",Toast.LENGTH_SHORT).show();
                }
            }
        });
/**
     * 判断网络连接是否可用
     */
    public static boolean isNetworkAvailable(Context context){
        ConnectivityManager cm=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if(cm == null){
            Toast.makeText(context, Constant.NETWORK_IS_NOT_TO_FORCE, Toast.LENGTH_SHORT).show();}else {
            //如果仅仅是用来判断网络连接
            //则可以使用 cm.getActiveNetworkInfo().isAvailable();  
            NetworkInfo[] info=cm.getAllNetworkInfo();
            if(info != null){
                for(int i=0;i<info.length;i++){
                    if(info[i].getState() == NetworkInfo.State.CONNECTED){
                        return true;
                    }
                }
            }
        }
        return false;
    }

最后记得加权限吧

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

就不截图了,但是项目中好像发现了一个小问题,
在链接wifi的情况下,不管这个wifi有木有网,只要连接了wifi就是有网络状态,我网上看了下,我这个方法就是大多数人用的方法,但是,他并没有判断当前是否真实有网,
哪位大佬明白,可以给小弟解释下