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())
]]
<lua>获取手机是否连接到网络和网络类型(Wi-FI、移动网络2、3、4G)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 原生的 WebView,无论是 iOS 或是 Android 都没有直接提供网络信息的 API,于是,我们需要使用...
- 上一篇文章讲了Android Things开发环境搭建,不明白的请查看http://www.jianshu.com...
- 如何让树莓派自动连接到一个预设好的 Wi-Fi 热点? 如过没乱动过 /etc/network/interface...
- 已经二十天没有记录恩恩的阅读了。阅读其实已经是习惯了,每天必看,只是我没有好好的记下来。,每次看到新书都开心得不得...