|
@@ -0,0 +1,213 @@
|
|
|
+package com.wdkl.callingbed2.util.ethernetwifiwithsipconnectstatus;
|
|
|
+
|
|
|
+import android.annotation.NonNull;
|
|
|
+import android.annotation.RequiresPermission;
|
|
|
+import android.content.Context;
|
|
|
+import android.net.ConnectivityManager;
|
|
|
+import android.net.NetworkCapabilities;
|
|
|
+import android.net.NetworkInfo;
|
|
|
+import android.net.wifi.WifiConfiguration;
|
|
|
+import android.net.wifi.WifiInfo;
|
|
|
+import android.net.wifi.WifiManager;
|
|
|
+import android.os.Build;
|
|
|
+import android.util.Log;
|
|
|
+
|
|
|
+import com.wdkl.callingbed2.MyApplication;
|
|
|
+import com.wdkl.callingbed2.util.LogUtil;
|
|
|
+
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+import static android.Manifest.permission.ACCESS_NETWORK_STATE;
|
|
|
+
|
|
|
+public class WifiNet {
|
|
|
+ private static final String TAG = "wifiNet";
|
|
|
+ private Context mContext;
|
|
|
+ private WifiManager wifiManager;
|
|
|
+ private ConnectivityManager connManager;
|
|
|
+ private static WifiNet sInstance = null;
|
|
|
+ private int networkId;
|
|
|
+
|
|
|
+
|
|
|
+ public WifiNet() {
|
|
|
+ mContext = MyApplication.getAppContext();
|
|
|
+ wifiManager = (WifiManager) mContext.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
|
|
|
+ connManager = (ConnectivityManager) mContext.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static WifiNet getInstance() {
|
|
|
+ if (sInstance == null) {
|
|
|
+ synchronized (WifiNet.class) {
|
|
|
+ if (sInstance == null) {
|
|
|
+ sInstance = new WifiNet();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return sInstance;
|
|
|
+ }
|
|
|
+
|
|
|
+ public boolean enableWifi() {
|
|
|
+ if (wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLED) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return wifiManager.setWifiEnabled(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ public boolean disableWifi() {
|
|
|
+ if (wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLED) {
|
|
|
+ return wifiManager.setWifiEnabled(false);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ public boolean connectWifi(String ssid, String pwd) {
|
|
|
+ Log.d(TAG, "connect() called with: ssid = [" + ssid + "], password = [" + pwd + "]");
|
|
|
+ boolean enabled = enableWifi();
|
|
|
+ Log.d(TAG, "connect: wifi opened = " + enabled);
|
|
|
+ boolean isConnected = isConnected(ssid);//当前已连接至指定wifi
|
|
|
+ Log.d(TAG, "connect: is already connected = " + isConnected);
|
|
|
+ if (isConnected) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ networkId = wifiManager.addNetwork(newWifiConfig(ssid, pwd, true));
|
|
|
+ boolean result = wifiManager.enableNetwork(networkId, true);
|
|
|
+ Log.d(TAG, "connect: network enabled = " + result);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ public WifiConfiguration newWifiConfig(String ssid, String password, boolean isClient) {
|
|
|
+ WifiConfiguration config = new WifiConfiguration();
|
|
|
+ config.allowedAuthAlgorithms.clear();
|
|
|
+ config.allowedGroupCiphers.clear();
|
|
|
+ config.allowedKeyManagement.clear();
|
|
|
+ config.allowedPairwiseCiphers.clear();
|
|
|
+ config.allowedProtocols.clear();
|
|
|
+ if (isClient) {//作为客户端, 连接服务端wifi热点时要加双引号
|
|
|
+ config.SSID = "\"" + ssid + "\"";
|
|
|
+ config.preSharedKey = "\"" + password + "\"";
|
|
|
+ } else {//作为服务端, 开放wifi热点时不需要加双引号
|
|
|
+ config.SSID = ssid;
|
|
|
+ config.preSharedKey = password;
|
|
|
+ }
|
|
|
+ config.hiddenSSID = true;
|
|
|
+ config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
|
|
|
+ config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
|
|
|
+ config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
|
|
|
+ config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
|
|
|
+ config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
|
|
|
+ config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
|
|
|
+ config.status = WifiConfiguration.Status.ENABLED;
|
|
|
+ return config;
|
|
|
+ }
|
|
|
+
|
|
|
+ public boolean isConnected(String ssid) {
|
|
|
+ WifiInfo wifiInfo = wifiManager.getConnectionInfo();
|
|
|
+ LogUtil.d(TAG, "wifi info: " + wifiInfo);
|
|
|
+ if (wifiInfo == null) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /*List<WifiConfiguration> configurations = wifiManager.getConfiguredNetworks();
|
|
|
+ if (configurations != null) {
|
|
|
+ for (WifiConfiguration configuration : configurations) {
|
|
|
+ LogUtil.d(TAG, "configuration networid = " + configuration.networkId);
|
|
|
+ if (configuration.networkId == wifiInfo.getNetworkId()) {
|
|
|
+ String ssid1 = configuration.SSID;
|
|
|
+ LogUtil.d(TAG, "ssid = " + ssid + ", ssid1 = " + ssid1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }*/
|
|
|
+
|
|
|
+ LogUtil.d(TAG, "wifi state: " + wifiInfo.getSupplicantState() + ", ssid: " + wifiInfo.getSSID());
|
|
|
+ switch (wifiInfo.getSupplicantState()) {
|
|
|
+ case AUTHENTICATING:
|
|
|
+ case ASSOCIATING:
|
|
|
+ case ASSOCIATED:
|
|
|
+ case FOUR_WAY_HANDSHAKE:
|
|
|
+ case GROUP_HANDSHAKE:
|
|
|
+ case COMPLETED:
|
|
|
+ return wifiInfo.getSSID().replace("\"", "").equals(ssid);
|
|
|
+ default:
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void disconnect() {
|
|
|
+ if (networkId != 0) {
|
|
|
+ wifiManager.disableNetwork(networkId);
|
|
|
+ }
|
|
|
+ wifiManager.disconnect();
|
|
|
+ }
|
|
|
+
|
|
|
+ public int getNetworkType() {
|
|
|
+ if (connManager != null && connManager.getActiveNetworkInfo() != null) {
|
|
|
+ return connManager.getActiveNetworkInfo().getType();
|
|
|
+ }
|
|
|
+
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 网络是否已连接
|
|
|
+ *
|
|
|
+ * @return true:已连接 false:未连接
|
|
|
+ */
|
|
|
+ @SuppressWarnings("deprecation")
|
|
|
+ @RequiresPermission(ACCESS_NETWORK_STATE)
|
|
|
+ public boolean isNetConnected() {
|
|
|
+ if (connManager != null) {
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
|
|
+ NetworkCapabilities networkCapabilities = connManager.getNetworkCapabilities(connManager.getActiveNetwork());
|
|
|
+ if (networkCapabilities != null) {
|
|
|
+ return networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
|
|
|
+ || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
|
|
|
+ || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
|
|
|
+ return networkInfo != null && networkInfo.isConnected();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Wifi是否已连接
|
|
|
+ *
|
|
|
+ * @return true:已连接 false:未连接
|
|
|
+ */
|
|
|
+ @SuppressWarnings("deprecation")
|
|
|
+ public boolean isWifiConnected() {
|
|
|
+ if (connManager != null) {
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
|
|
+ NetworkCapabilities networkCapabilities = connManager.getNetworkCapabilities(connManager.getActiveNetwork());
|
|
|
+ if (networkCapabilities != null) {
|
|
|
+ return networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
|
|
|
+ return networkInfo != null && networkInfo.isConnected() && networkInfo.getType() == ConnectivityManager.TYPE_WIFI;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 是否为流量
|
|
|
+ */
|
|
|
+ @SuppressWarnings("deprecation")
|
|
|
+ public boolean isMobileData() {
|
|
|
+ if (connManager != null) {
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
|
|
+ NetworkCapabilities networkCapabilities = connManager.getNetworkCapabilities(connManager.getActiveNetwork());
|
|
|
+ if (networkCapabilities != null) {
|
|
|
+ return networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
|
|
|
+ return networkInfo != null && networkInfo.isConnected() && networkInfo.getType() == ConnectivityManager.TYPE_MOBILE;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|