WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();

public static boolean isWifi5G(Context context) {
    int freq = 0;
    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    WifiInfo wifiInfo = wifiManager.getConnectionInfo();
    if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.LOLLIPOP) {
        freq = wifiInfo.getFrequency();
    } else {
        String ssid = wifiInfo.getSSID();
        if (ssid != null && ssid.length() > 2) {
            String ssidTemp = ssid.substring(1, ssid.length() - 1);
            List<ScanResult> scanResults = wifiManager.getScanResults();
            for (ScanResult scanResult : scanResults) {
                if (scanResult.SSID.equals(ssidTemp)) {
                    freq = scanResult.frequency;
                    break;
                }
            }
        }
    }
    LgqLogPlus.e("WiFi====fff   "+freq);
    return freq > 4900 && freq < 5900;
}

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

 2.4G和5G以及单双频WiFi判断

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

 public Context mContext;
    private List<WIFIBean> wifiBeans = new ArrayList<>();
    private List<WIFIBean> wifiBeans2 = new ArrayList<>();
    private List<WIFIBean> wifiBeans3 = new ArrayList<>();

    public void isWifi5G(){
        WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);

        List<ScanResult> scanResults = wifiManager.getScanResults();
        LgqLogutil.e("WiFi====fff   "+"....."+scanResults.size());

        for (int c = 0;c<scanResults.size();c++) {
            LgqLogutil.e("WiFi====fff   " + scanResults.get(c).SSID + "....." + scanResults.get(c).frequency);
            if (!scanResults.get(c).SSID.isEmpty()){
                WIFIBean wifiBean = new WIFIBean();
                wifiBean.names = scanResults.get(c).SSID;
                int fre = scanResults.get(c).frequency;
                if (fre>5000){
                    wifiBean.types = 5;
                }else {
                    wifiBean.types = 2;
                }
                wifiBeans.add(wifiBean);
                wifiBeans2.add(wifiBean);

            }
        }
//        LgqLogPlus.e("WiFi====fff   "+"....."+MyByteUtil.parseObjToJsonStr(wifiBeans));

        for (int a = 0;a<wifiBeans.size();a++){
            for (int k = 0;k<wifiBeans2.size();k++){
                if (wifiBeans.get(a).names.equals(wifiBeans2.get(k).names)){
                    if (wifiBeans.get(a).types!=wifiBeans2.get(k).types){
                        WIFIBean wifiBean = new WIFIBean();
                        wifiBean.names = wifiBeans.get(a).names;
                        wifiBean.types = 1;
                        wifiBeans.set(a,wifiBean);
                    }
                }
            }
        }


        for (int x= 0 ;x<wifiBeans.size();x++){
            if (wifiBeans3.isEmpty()){
                wifiBeans3.add(wifiBeans.get(x));
            }else {
                boolean ifok=false;
                for (int y =0;y<wifiBeans3.size();y++){
                    if (wifiBeans.get(x).names.equals(wifiBeans3.get(y).names)){
                        ifok = true;
                        break;
                    }else {
                        ifok = false;
                    }
                }
                if (!ifok){
                    LgqLogutil.e("gggg----"+wifiBeans.get(x).names+"........"+wifiBeans.get(x).types);
                    wifiBeans3.add(wifiBeans.get(x));
                }
            }
        }
//        wifiAdapter.setNewData(wifiBeans3);
    }

 获取已连接的WiFi名称

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

//获取SSID
//完美解决9.0的机型,必须请求GPS权限并打开GPS才可以正确获取到WIFI名称
private String getNetConfListForSSID() {
    String ssid = "";
    WifiManager mWifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    if (mWifiManager != null) {
        WifiInfo info = mWifiManager.getConnectionInfo();

        //android10.0需要申请新添加的隐私权限ACCESS_FINE_LOCATION,如果还需要后台获取或者使用wifi api则还需要申请后台使用定位权限ACCESS_BACKGROUND_LOCATION
        //链接:https://www.jianshu.com/p/7c05a99f94da

        if(!IsNullString(info.getSSID())){
            ssid = info.getSSID();
            Log.e("lgq","---直接获取ssid:"+ssid);
        }else{
            int networkId = info.getNetworkId();
            @SuppressLint("MissingPermission")
            List<WifiConfiguration> netConfList = mWifiManager.getConfiguredNetworks();
            if(netConfList==null){
                return "";
            }
            for (WifiConfiguration wificonf:netConfList){
                if(wificonf.networkId == networkId){
                    Log.e("lgq","---间接获取ssid:"+ssid);
                }
            }
        }
    }

    if (ssid!=null && ssid.startsWith("\"")) {
        ssid = ssid.substring(1);
    }
    if (ssid!=null && ssid.endsWith("\"")) {
        ssid = ssid.substring(0, ssid.length() - 1);
    }

    return ssid;
}

//判断字符是否为空或者没数据
public static boolean IsNullString(String str) {
    if (str != null && !TextUtils.isEmpty(str) && !TextUtils.equals("", str.trim())) {
        return false;
    } else {
        return true;
    }
}

获取wifi的mac地址

public class D2WifiAdminSimple {

   private final Context mContext;
   public D2WifiAdminSimple(Context context) {
      mContext = context;
   }
   //获取SSID
   //完美解决9.0的机型,必须请求GPS权限并打开GPS才可以正确获取到WIFI名称
   public String getWifiConnectedSsid() {
      String  ssid="";
      WifiManager mWifiManager=(WifiManager)mContext.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
      if(mWifiManager!=null){
         WifiInfo info=mWifiManager.getConnectionInfo();
         int networkId=info.getNetworkId();
         List<WifiConfiguration> netConfList=mWifiManager.getConfiguredNetworks();
         for (WifiConfiguration wificonf:netConfList){
            if(wificonf.networkId == networkId){
               ssid=wificonf.SSID;
            }
         }

      }
      if (ssid!=null && ssid.startsWith("\"")) {
         ssid = ssid.substring(1);
      }
      if (ssid!=null && ssid.endsWith("\"")) {
         ssid = ssid.substring(0, ssid.length() - 1);
      }

      return ssid;
   }
   
   public String getWifiConnectedBssid() {
      WifiInfo mWifiInfo = getConnectionInfo();
      String bssid = null;
      if (mWifiInfo != null && isWifiConnected()) {
         bssid = mWifiInfo.getBSSID();
      }
      return bssid;
   }

   // get the wifi info which is "connected" in wifi-setting
   private WifiInfo getConnectionInfo() {
      WifiManager mWifiManager = (WifiManager) mContext.getApplicationContext()
            .getSystemService(Context.WIFI_SERVICE);
      WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
      return wifiInfo;
   }

   private boolean isWifiConnected() {
      NetworkInfo mWiFiNetworkInfo = getWifiNetworkInfo();
      boolean isWifiConnected = false;
      if (mWiFiNetworkInfo != null) {
         isWifiConnected = mWiFiNetworkInfo.isConnected();
      }
      return isWifiConnected;
   }

   private NetworkInfo getWifiNetworkInfo() {
      ConnectivityManager mConnectivityManager = (ConnectivityManager) mContext.getApplicationContext()
            .getSystemService(Context.CONNECTIVITY_SERVICE);
      NetworkInfo mWiFiNetworkInfo = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
      return mWiFiNetworkInfo;
   }
}

private D2WifiAdminSimple mWifiAdmin;
String strWifiBSSID = mWifiAdmin.getWifiConnectedBssid();

 监听网络状态

//实时监听网络变化
private void listenConnectChance() {
   try {
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
         ConnectivityManager connectivityManager = (ConnectivityManager) AppContext1.getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
         // 请注意这里会有一个版本适配bug,所以请在这里添加非空判断
         if (connectivityManager != null) {
            connectivityManager.requestNetwork(new NetworkRequest.Builder().build(), new ConnectivityManager.NetworkCallback() {
               /**
                * 网络可用的回调
                * 可用状态,判断手机网络,2.4G和5G
                * */
               @Override
               public void onAvailable(Network network) {
                  super.onAvailable(network);
                  LgqLogPlus.e("onAvailable 网络切换在线");

               }

               /**
                * 网络丢失的回调
                * 丢失状态,提示没网络
                * */
               @Override
               public void onLost(Network network) {
                  super.onLost(network);
                  //调onLost时,如果发现还有wifi或者移动网络时,会再次调onAvailable方法
                  LgqLogPlus.e("onLost网络切换离线4444");
                  EventBus.getDefault().post(new EBFragment(EBConstant.MAIN_HOME_NETWORK_OFF, null));

               }

               @Override
               public void onLinkPropertiesChanged(Network network, LinkProperties linkProperties) {
                  super.onLinkPropertiesChanged(network, linkProperties);
                  AppLog.Loge("onLinkPropertiesChanged");
               }

               @Override
               public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) {
                  super.onCapabilitiesChanged(network, networkCapabilities);
                  AppLog.Loge("onCapabilitiesChanged");
               }

               @Override
               public void onLosing(Network network, int maxMsToLive) {
                  super.onLosing(network, maxMsToLive);
                  AppLog.Loge("onLosing");
               }

               @Override
               public void onUnavailable() {
                  super.onUnavailable();
                  AppLog.Loge("onUnavailable");
               }

            });
         }
      }
   } catch (Exception e) {
      CrashReport.postCatchedException(e);  // bugly会将这个throwable上报
   }

}

1、添加权限

<uses-permission android:name="android.permission.INTERNET"/>
<!-- 网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

2、创建监听广播NetWorkChangReceiver

public class NetWorkChangReceiver extends BroadcastReceiver {

    /**
     * 获取连接类型
     *
     * @param type
     * @return
     */
    private String getConnectionType(int type) {
        String connType = "";
        if (type == ConnectivityManager.TYPE_MOBILE) {
            connType = "3G网络数据";
        } else if (type == ConnectivityManager.TYPE_WIFI) {
            connType = "WIFI网络";
        }
        return connType;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) {// 监听wifi的打开与关闭,与wifi的连接无关
            int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
            Log.e("lgqTAG", "wifiState:" + wifiState);
            switch (wifiState) {
                case WifiManager.WIFI_STATE_DISABLED:
                    break;
                case WifiManager.WIFI_STATE_DISABLING:
                    break;
            }
        }
        // 监听网络连接,包括wifi和移动数据的打开和关闭,以及连接上可用的连接都会接到监听
        if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
            //获取联网状态的NetworkInfo对象
            NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
            if (info != null) {
                //如果当前的网络连接成功并且网络连接可用
                if (NetworkInfo.State.CONNECTED == info.getState() && info.isAvailable()) {
                    if (info.getType() == ConnectivityManager.TYPE_WIFI || info.getType() == ConnectivityManager.TYPE_MOBILE) {
                        Log.i("lgqTAG", getConnectionType(info.getType()) + "连上");
                    }
                } else {
                    Log.i("lgqTAG", getConnectionType(info.getType()) + "断开");
                }
            }
        }
    }
}

3、配置广播

<!--监听网络状态-->
<receiver android:name=".NetWorkChangReceiver" >
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
        <action android:name="android.net.wifi.STATE_CHANGE" />
    </intent-filter>
</receiver>

4、注册广播

private NetWorkChangReceiver netWorkChangReceiver;
netWorkChangReceiver = new NetWorkChangReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(netWorkChangReceiver, filter);

 5、退出时

 unregisterReceiver(netWorkChangReceiver);

2、判断网络连接方式——wifi。2G,3G。4G。5G

public class Constants {
    /**
     * Unknown network class
     */
    public static final int NETWORK_CLASS_UNKNOWN = 0;

    /**
     * wifi net work
     */
    public static final int NETWORK_WIFI = 1;

    /**
     * "2G" networks
     */
    public static final int NETWORK_CLASS_2_G = 2;

    /**
     * "3G" networks
     */
    public static final int NETWORK_CLASS_3_G = 3;

    /**
     * "4G" networks
     */
    public static final int NETWORK_CLASS_4_G = 4;

}
public static int getNetWorkClass(Context context) {
    TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

    switch (telephonyManager.getNetworkType()) {
        case TelephonyManager.NETWORK_TYPE_GPRS:
        case TelephonyManager.NETWORK_TYPE_EDGE:
        case TelephonyManager.NETWORK_TYPE_CDMA:
        case TelephonyManager.NETWORK_TYPE_1xRTT:
        case TelephonyManager.NETWORK_TYPE_IDEN:
            return Constants.NETWORK_CLASS_2_G;

        case TelephonyManager.NETWORK_TYPE_UMTS:
        case TelephonyManager.NETWORK_TYPE_EVDO_0:
        case TelephonyManager.NETWORK_TYPE_EVDO_A:
        case TelephonyManager.NETWORK_TYPE_HSDPA:
        case TelephonyManager.NETWORK_TYPE_HSUPA:
        case TelephonyManager.NETWORK_TYPE_HSPA:
        case TelephonyManager.NETWORK_TYPE_EVDO_B:
        case TelephonyManager.NETWORK_TYPE_EHRPD:
        case TelephonyManager.NETWORK_TYPE_HSPAP:
            return Constants.NETWORK_CLASS_3_G;

        case TelephonyManager.NETWORK_TYPE_LTE:
            return Constants.NETWORK_CLASS_4_G;

        default:
            return Constants.NETWORK_CLASS_UNKNOWN;
    }
}
public static int getNetWorkStatus(Context context) {//等于1时是wifi网络,等于4是4G网络,等于3是3G网络
    int netWorkType = Constants.NETWORK_CLASS_UNKNOWN;

    ConnectivityManager connectivityManager = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();

    if (networkInfo != null && networkInfo.isConnected()) {
        int type = networkInfo.getType();

        if (type == ConnectivityManager.TYPE_WIFI) {
            netWorkType = Constants.NETWORK_WIFI;
        } else if (type == ConnectivityManager.TYPE_MOBILE) {
            netWorkType = getNetWorkClass(context);
        }
    }

    return netWorkType;
}

3、判断网络是否连接

/**
 * 判断是否有网络连接
 * @param context
 * @return
 */
public static boolean isNetworkConnected(Context context) {//true是链接,false是没链接
    if (context != null) {
        ConnectivityManager mConnectivityManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
        if (mNetworkInfo != null) {
            return mNetworkInfo.isAvailable();
        }
    }
    return false;
}

9.0网络访问方法:application添加 android:usesCleartextTraffic="true" 即可 

private static boolean isWIFIConnection(Context context) {
    ConnectivityManager manager = (ConnectivityManager) context.getApplicationContext()
            .getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo networkInfo = manager
            .getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    if (networkInfo != null) {
        return networkInfo.isConnected();
    }
    return false;
}

startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));

public String getLocalIpAddress(Context context) {
    WifiManager wifiManager = (WifiManager) context.getApplicationContext().
            getSystemService(Context.WIFI_SERVICE);
    //判断wifi是否开启
    if (!wifiManager.isWifiEnabled()) {
        wifiManager.setWifiEnabled(true);
    }
    WifiInfo wifiInfo = wifiManager.getConnectionInfo();
    int ipAddress = wifiInfo.getIpAddress();
    String ip = intTo255Ip(ipAddress);
    return ip;
}

private String intTo255Ip(int i) {
    return (i & 0xFF) + "." +
            ((i >> 8) & 0xFF) + "." +
            ((i >> 16) & 0xFF) + "." +
            (i >> 24 & 0xFF);
}

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐