美文网首页
获取手机是否连接到网络和网络类型(Wi-FI、移动网络

获取手机是否连接到网络和网络类型(Wi-FI、移动网络

作者: lfpwhy | 来源:发表于2018-12-19 14:58 被阅读0次
require "import"

import "android.content.Context"
import "android.net.ConnectivityManager"
import "android.net.NetworkInfo"
import "android.telephony.TelephonyManager"

--[[
1. 判断手机是否已经连接到网络
2. 获取网络连接的类型 Wi-Fi 或 移动数据连接

@author:  NowTime<wenzhouchan@gmail.com
@link:    https://nowtime.cc
--]]

function get_network_type()
  --没有网络连接
  local NETWORN_NONE = 0;

  --Wi-Fi 连接
  local NETWORN_WIFI = 1;

  --手机网络数据连接类型
  local NETWORN_2G = 2;-- 2G
  local NETWORN_3G = 3;-- 3G
  local NETWORN_4G = 4;-- 4G
  local NETWORN_MOBILE = 5;-- 未识别的网络信号

  --获取系统的网络服务
  connManager = activity.getSystemService(Context.CONNECTIVITY_SERVICE);

  --如果当前没有网络
  if (nil == connManager) then
    return NETWORN_NONE;
  end

  --获取当前网络类型,如果为空,返回无网络
  activeNetInfo = connManager.getActiveNetworkInfo();
  if (activeNetInfo == nil or activeNetInfo.isAvailable() == false) then
    return NETWORN_NONE;
  end

  --判断是不是连接的是不是wifi
  wifiInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
  if (nil ~= wifiInfo) then
    state = wifiInfo.getState();
    if (null ~= state) then
      if (state == NetworkInfo.State.CONNECTED or state == NetworkInfo.State.CONNECTING) then
        return NETWORN_WIFI;
      end
    end
  end

  --如果不是wifi,则判断当前连接的是运营商的哪种网络 2G、3G、4G 等
  networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

  if (nil ~= networkInfo) then
    state = networkInfo.getState();
    strSubTypeName = tostring(networkInfo.getSubtypeName());
    if (nil ~= state) then
      if (state == NetworkInfo.State.CONNECTED or state == NetworkInfo.State.CONNECTING) then
        local NetInfo = tonumber(activeNetInfo.getSubtype());

        if (NetInfo == 1 or NetInfo == 2 or NetInfo == 4 or NetInfo == 7 or NetInfo == 11) then
          return NETWORN_2G;
        end

        if (NetInfo == 3 or NetInfo == 5 or NetInfo == 6 or NetInfo == 8 or NetInfo == 9 or NetInfo == 10 or NetInfo == 12 or NetInfo == 14 or NetInfo == 15) then
          return NETWORN_3G;
        end

        if (NetInfo == 13) then
          return NETWORN_4G;
        end

        if (strSubTypeName.equalsIgnoreCase("TD-SCDMA") or strSubTypeName.equalsIgnoreCase("WCDMA") or strSubTypeName.equalsIgnoreCase("CDMA2000")) then
          return NETWORN_3G;
        else
          return NETWORN_MOBILE;
        end
      end
    end
    return NETWORN_NONE;
  end
end

--[[
使用方法:
print(get_network_type())
]]

相关文章

网友评论

      本文标题:获取手机是否连接到网络和网络类型(Wi-FI、移动网络

      本文链接:https://www.haomeiwen.com/subject/rgjjkqtx.html