فهرست منبع

<增加wifi功能>

weizhengliang 4 سال پیش
والد
کامیت
93742280c0

+ 13 - 10
app/src/main/AndroidManifest.xml

@@ -17,7 +17,7 @@
 
     <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
-    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
+    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
     <uses-permission android:name="android.permission.WAKE_LOCK" />
     <uses-permission android:name="android.permission.WRITE_SETTINGS" />
@@ -28,17 +28,20 @@
     <uses-permission android:name="android.permission.RECORD_AUDIO" />
     <uses-permission android:name="android.permission.STATUS_BAR" />
 
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
 
-    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
-    <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
-    <uses-permission android:name="android.permission.CAMERA"></uses-permission>
-    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
-    <uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
-    <uses-permission android:name="android.permission.DISABLE_KEYGUARD"></uses-permission>
-    <uses-permission android:name="android.permission.BROADCAST_STICKY"></uses-permission>
-    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.READ_CONTACTS"/>
+    <uses-permission android:name="android.permission.CAMERA"/>
+    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
+    <uses-permission android:name="android.permission.BLUETOOTH"/>
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
+    <uses-permission android:name="android.permission.BROADCAST_STICKY"/>
+    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 
 
     <uses-feature

+ 1 - 1
app/src/main/java/com/wdkl/callingbed2/MyApplication.java

@@ -91,7 +91,7 @@ public class MyApplication extends Application {
         initClient();
         initUdp();
         //初始化关闭连接wifi热点,优先连接以太网
-        closeConnectWifiHost();
+        //closeConnectWifiHost();
 
         Intent bindIntent = new Intent(this, APPService.class);
         bindService(bindIntent, connection, BIND_AUTO_CREATE);

+ 14 - 2
app/src/main/java/com/wdkl/callingbed2/ui/CallingBedActivity.java

@@ -92,6 +92,7 @@ import com.wdkl.callingbed2.util.TwoDimensionCodeUtil;
 import com.wdkl.callingbed2.util.UdpSendUtil;
 import com.wdkl.callingbed2.util.VoiceManagerUtil;
 import com.wdkl.callingbed2.util.ethernetwifiwithsipconnectstatus.WifiBindSipStatusConnector;
+import com.wdkl.callingbed2.util.ethernetwifiwithsipconnectstatus.WifiNet;
 import com.wdkl.callingbed2.util.sendcommand.CallingBedSendCommand;
 import com.wdkl.callingbed2.widget.loading.IMediaPlayerVolume;
 import com.wdkl.callingbed2.widget.view.MyTextView;
@@ -127,6 +128,7 @@ import static com.wdkl.callingbed2.common.Constants.STANDBY;
 import static com.wdkl.callingbed2.common.Constants.innetSIPAddress;
 import static com.wdkl.callingbed2.util.ToastUtil.showToast;
 import static com.wdkl.callingbed2.util.ethernetwifiwithsipconnectstatus.WifiBindSipStatusConnector.ethernetStatus;
+import static com.wdkl.callingbed2.util.ethernetwifiwithsipconnectstatus.WifiBindSipStatusConnector.wifiStatus;
 import static com.wdkl.callingbed2.util.sendcommand.CallingBedSendCommand.closeHeart;
 import static com.wdkl.callingbed2.util.sendcommand.CallingBedSendCommand.setBedLight;
 import static com.wdkl.callingbed2.util.sendcommand.CallingBedSendCommand.setCallStatus;
@@ -766,6 +768,12 @@ public class CallingBedActivity extends BaseActivity implements ISerialPortBedOn
                 }
             }
         });
+
+        //如果已经连接上以太网,则优先使用有线以太网,关闭WiFi
+        if (WifiNet.getInstance().getNetworkType() == ConnectivityManager.TYPE_ETHERNET) {
+            boolean disable = WifiNet.getInstance().disableWifi();
+            LogUtil.d("initwifi", "关闭WiFi: " + disable);
+        }
     }
 
     @Override
@@ -1998,11 +2006,15 @@ public class CallingBedActivity extends BaseActivity implements ISerialPortBedOn
                 }
             case EVENT_SIP_INTERNETPING://循环更新以太网ping信息和sip信息
                 SipHelperUtil.getInstance(this).obtainSipInfo();//获取sip信息
-                if (ethernetStatus) {
+                if (ethernetStatus && WifiNet.getInstance().getNetworkType() == ConnectivityManager.TYPE_ETHERNET) {
                     ivEthernet.setImageResource(R.mipmap.ic_etherneting);
-                    ivWifi.setImageResource(R.mipmap.ic_wifi_nor);
                 } else {
                     ivEthernet.setImageResource(R.mipmap.ic_etherneted);
+                }
+
+                if (wifiStatus && WifiNet.getInstance().getNetworkType() == ConnectivityManager.TYPE_WIFI) {
+                    ivWifi.setImageResource(R.mipmap.ic_wifi_high);
+                } else {
                     ivWifi.setImageResource(R.mipmap.ic_wifi_nor);
                 }
                 break;

+ 26 - 10
app/src/main/java/com/wdkl/callingbed2/ui/InitActivity.java

@@ -37,6 +37,7 @@ import com.wdkl.callingbed2.util.StringUtils;
 import com.wdkl.callingbed2.util.ToastUtil;
 import com.wdkl.callingbed2.util.UdpSendUtil;
 import com.wdkl.callingbed2.util.VoiceManagerUtil;
+import com.wdkl.callingbed2.util.ethernetwifiwithsipconnectstatus.WifiNet;
 import com.wdkl.callingbed2.util.sendcommand.CallingBedSendCommand;
 import com.zhy.http.okhttp.OkHttpUtils;
 import com.zhy.http.okhttp.callback.StringCallback;
@@ -83,6 +84,8 @@ public class InitActivity extends BaseActivity implements SerialPortUtil.ISerial
     SerialPortUtil serialPortUtil;
     private static int countsReboot = 0;//重启计数
 
+    private boolean wifiEnabled;
+
     @Override
     public int getLayoutId() {
         return R.layout.activity_init_layout;
@@ -121,6 +124,8 @@ public class InitActivity extends BaseActivity implements SerialPortUtil.ISerial
         //20190415 waderson
         ScreenManagerUtil.setScreenBrightness(context, 210);
 
+        startEnableWifi();
+
         dateRefresh();
 
     }
@@ -132,7 +137,11 @@ public class InitActivity extends BaseActivity implements SerialPortUtil.ISerial
 
     @OnClick(R.id.activity_init_layout_rl)
     public void init(View view) {
-        isNewWork();
+        //isNewWork();
+    }
+
+    private void startEnableWifi() {
+        wifiEnabled = WifiNet.getInstance().enableWifi();
     }
 
     /**
@@ -176,14 +185,21 @@ public class InitActivity extends BaseActivity implements SerialPortUtil.ISerial
      * 无网络显示错误页面
      */
     public void isNewWork() {
+        //尝试连接wifi
+        if (wifiEnabled) {
+            boolean connect = WifiNet.getInstance().connectWifi("NCS", "23456789");
+        }
+
         if (cm != null) {
             //ethreboot();//wuyq add
             String ipStr = NetUtil.getLocalIP();
             NetworkInfo networkInfo = cm.getActiveNetworkInfo();
+            LogUtil.d("initwifi", "network info: " + networkInfo);
             if (networkInfo != null && networkInfo.isConnected()) { //wuyq modify
+                LogUtil.d("Initwifi", "network type: " + networkInfo.getType() + ", network typeName: " + networkInfo.getTypeName());
                 if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI || networkInfo.getType() == ConnectivityManager.TYPE_ETHERNET) {
                     CallingBedSendCommand.setSipStatus(serialPortUtil, "2");
-                    getInitData();
+                    getInitData(networkInfo.getTypeName());
                     countsReboot = 0; //wuyq add
                 } else {
                     updateHandler.sendEmptyMessageDelayed(404, DATEREFRESH_DELAYMILLIS);
@@ -195,8 +211,8 @@ public class InitActivity extends BaseActivity implements SerialPortUtil.ISerial
                 //updateHandler.sendEmptyMessageDelayed(404, DATEREFRESH_DELAYMILLIS);//wuyq remove
                 updateHandler.sendEmptyMessageDelayed(4444, DATEREFRESH_DELAYMILLIS);//wuyq add
                 CallingBedSendCommand.setSipStatus(serialPortUtil, "0");
-                showNetErrorView("MAC地址: " + macAddress + " IP地址: " + ipStr + "\nError:无网络连接;以太网是否连接正常?");//网络信息初始化错误
-                ToastUtil.showToast("无网络连接;以太网是否连接正常?");//网络信息初始化错误
+                showNetErrorView("MAC地址: " + macAddress + " IP地址: " + ipStr + "\nError:无网络连接;网是否连接正常?");//网络信息初始化错误
+                ToastUtil.showToast("无网络连接;网是否连接正常?");//网络信息初始化错误
 
                 resetEthernet();
             }
@@ -212,7 +228,7 @@ public class InitActivity extends BaseActivity implements SerialPortUtil.ISerial
      * =================================================(网络不通)15次以上自动重启系统=====================================================
      */
     private void resetEthernet() {
-        if (countsReboot == 10) {
+        if (countsReboot == 15) {
             updateHandler.sendEmptyMessage(222);
             countsReboot = 0;
         }
@@ -272,7 +288,7 @@ public class InitActivity extends BaseActivity implements SerialPortUtil.ISerial
     /**
      * 获取初始化信息
      */
-    private void getInitData() {
+    private void getInitData(final String type) {
         LogUtil.d("getInitData", "URL==" + Constants.URL + Constants.URL_END + Constants.CALLINGBED_INIT);
         final String ipStr = NetUtil.getLocalIP();
         //网络恢复正常,重置重启计数
@@ -290,7 +306,7 @@ public class InitActivity extends BaseActivity implements SerialPortUtil.ISerial
                         public void onError(Call call, Exception e, int id) {
                             ivLoading.setVisibility(View.INVISIBLE);
                             dismissNurseBrightness();
-                            showNetErrorView("MAC地址: " + macAddress + " IP地址: " + ipStr + "\nError:" + "初始化数据请求错误[MAC地址是否注册?]");
+                            showNetErrorView("MAC地址: " + macAddress + " IP地址: " + ipStr + "\nError:" + "初始化数据请求错误[MAC地址是否注册?], " + type);
                             //updateHandler.sendEmptyMessageDelayed(404, DATEREFRESH_DELAYMILLIS);//wuyq remove
                             updateHandler.sendEmptyMessageDelayed(4444, DATEREFRESH_DELAYMILLIS);//wuyq add
                             ToastUtil.showToast("初始化数据请求错误");
@@ -306,7 +322,7 @@ public class InitActivity extends BaseActivity implements SerialPortUtil.ISerial
                                 JSONObject object = new JSONObject(data);
                                 if (object.getString("Code").equals("ERROR!")) {
                                     dismissNurseBrightness();
-                                    showNetErrorView("MAC地址: " + macAddress + " IP地址: " + ipStr + "\nError:" + "数据错误异常[ERROR!]");
+                                    showNetErrorView("MAC地址: " + macAddress + " IP地址: " + ipStr + "\nError:" + "数据错误异常[ERROR!], " + type);
                                     updateHandler.sendEmptyMessageDelayed(404, DATEREFRESH_DELAYMILLIS);
                                     ToastUtil.showToast("数据请求失败");
                                 } else {
@@ -321,7 +337,7 @@ public class InitActivity extends BaseActivity implements SerialPortUtil.ISerial
                                         InitActivity.this.finish();
                                     } else {
                                         dismissNurseBrightness();
-                                        showNetErrorView("MAC地址: " + macAddress + " IP地址: " + ipStr + "\nError: " + "设备未启用");
+                                        showNetErrorView("MAC地址: " + macAddress + " IP地址: " + ipStr + "\nError: " + "设备未启用, " + type);
                                         updateHandler.sendEmptyMessageDelayed(404, DATEREFRESH_DELAYMILLIS);
                                         ToastUtil.showToast("设备未启用");
                                     }
@@ -614,7 +630,7 @@ public class InitActivity extends BaseActivity implements SerialPortUtil.ISerial
         }
     };
 
-    public static final long DATEREFRESH_DELAYMILLIS = 8000;
+    public static final long DATEREFRESH_DELAYMILLIS = 10000;
 
     @Subscribe(threadMode = ThreadMode.MAIN)
     public void onMoonEvent(MessageEvent messageEvent) {

+ 9 - 9
app/src/main/java/com/wdkl/callingbed2/util/ethernetwifiwithsipconnectstatus/WifiBindSipStatusConnector.java

@@ -8,6 +8,7 @@ import android.os.Handler;
 import com.wdkl.callingbed2.R;
 import com.wdkl.callingbed2.common.Constants;
 import com.wdkl.callingbed2.entity.MessageEvent;
+import com.wdkl.callingbed2.util.LogUtil;
 import com.wdkl.callingbed2.util.NetUtil;
 import com.wdkl.callingbed2.util.SipUtil.SipHelperUtil;
 
@@ -28,7 +29,7 @@ public class WifiBindSipStatusConnector {
     public static boolean ethernetStatus = false;
     private int ethernetCounts = 0;
     //wifi连接状态(暂时注掉)
-    // public static boolean wifiStatus;
+    public static boolean wifiStatus;
 
     /**
      * 向UI发送消息
@@ -226,7 +227,7 @@ public class WifiBindSipStatusConnector {
         mWifiMiddle = context.getResources().getDrawable(R.drawable.wifi_middle);//wifi中
         mWifiLow = context.getResources().getDrawable(R.drawable.wifi_low);//wifi弱
 
-        wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+        wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
         mWifiBindSipStatusConnector = getInstance(context);
         if (timerNetStatus != null) {
             timerNetStatus.purge();
@@ -276,14 +277,14 @@ public class WifiBindSipStatusConnector {
             ethernetStatus = false;
         }
 
-        // (暂时注掉)
-        /*if (ipWifi != null) {
+
+        if (ipWifi != null) {
             wifiStatus = SipHelperUtil.getInstance(context)
                     .getmEthernetWifiCallBackI()
-                    .wifiStatus(NetUtil.ping(NetUtil.getLocalElement(ipWifi), 2, null));//wifi连接状态
+                    .wifiStatus(NetUtil.ping(/*NetUtil.getLocalElement(ipWifi)*/ NetUtil.getLocalElement(3), 2, null));//wifi连接状态
         } else {
             wifiStatus = false;
-        }*/
+        }
         EventBus.getDefault().post(new MessageEvent(ETHERNETSTATUS, Constants.EVENT_SIP_INTERNETPING));//循环检测SIP,以太网ping状态
 
 
@@ -438,8 +439,7 @@ public class WifiBindSipStatusConnector {
     public static WifiBindSipStatusConnector getInstance(Context contexts) {
         if (mWifiBindSipStatusConnector == null) {
             context = contexts;
-            mWifiBindSipStatusConnector = new WifiBindSipStatusConnector((WifiManager) context.getSystemService(Context.WIFI_SERVICE))
-            ;
+            mWifiBindSipStatusConnector = new WifiBindSipStatusConnector((WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE));
         }
         return mWifiBindSipStatusConnector;
     }
@@ -610,7 +610,7 @@ public class WifiBindSipStatusConnector {
      */
     public boolean isWifiOpened() {
         if (wifiManager == null)
-            wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+            wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
         int status = wifiManager.getWifiState();
         return status == WifiManager.WIFI_STATE_ENABLED;
     }

+ 213 - 0
app/src/main/java/com/wdkl/callingbed2/util/ethernetwifiwithsipconnectstatus/WifiNet.java

@@ -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;
+    }
+
+}