android 网络实时监听网络状态变化 及 网络类型判断
2023-03-07 09:07:44 时间
android 中 我们经常需要判断 各种网络类型 然后需要给用户做出相应的提示,一般网络类型有 2g ,3g,4g ,wifi,无网络等等。
1. 网络类型判断
TelephonyManager 中 定义常量值
public static final int NETWORK_TYPE_1xRTT = 7;
public static final int NETWORK_TYPE_CDMA = 4;
public static final int NETWORK_TYPE_EDGE = 2;
public static final int NETWORK_TYPE_EHRPD = 14;
public static final int NETWORK_TYPE_EVDO_0 = 5;
public static final int NETWORK_TYPE_EVDO_A = 6;
public static final int NETWORK_TYPE_EVDO_B = 12;
public static final int NETWORK_TYPE_GPRS = 1;
public static final int NETWORK_TYPE_HSDPA = 8;
public static final int NETWORK_TYPE_HSPA = 10;
public static final int NETWORK_TYPE_HSPAP = 15;
public static final int NETWORK_TYPE_HSUPA = 9;
public static final int NETWORK_TYPE_IDEN = 11;
public static final int NETWORK_TYPE_LTE = 13;
public static final int NETWORK_TYPE_UMTS = 3;
public static final int NETWORK_TYPE_UNKNOWN = 0;
public static int getNetworkType(Context context) {
ConnectivityManager connectMgr = (ConnectivityManager) context.getSystemService(
Context.CONNECTIVITY_SERVICE);
NetworkInfo info = connectMgr.getActiveNetworkInfo();
if (info != null) {
if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
switch (info.getSubtype()) {
case TelephonyManager.NETWORK_TYPE_CDMA: // telcom
case TelephonyManager.NETWORK_TYPE_1xRTT: // telecom
case TelephonyManager.NETWORK_TYPE_GPRS: // unicom
case TelephonyManager.NETWORK_TYPE_EDGE: // cmcc
return NETWORK_TYPE_2G;
case TelephonyManager.NETWORK_TYPE_EHRPD: // telecom
case TelephonyManager.NETWORK_TYPE_EVDO_0: // telecom
case TelephonyManager.NETWORK_TYPE_EVDO_A: // telecom 3.5G
case TelephonyManager.NETWORK_TYPE_EVDO_B: // telecom 3.5G
case TelephonyManager.NETWORK_TYPE_HSPA: // unicom
case TelephonyManager.NETWORK_TYPE_HSPAP: // unicom
case TelephonyManager.NETWORK_TYPE_HSDPA: // unicom 3.5G
case TelephonyManager.NETWORK_TYPE_HSUPA: // unicom 3.5G
case TelephonyManager.NETWORK_TYPE_UMTS: // unicom
return NETWORK_TYPE_3G;
case TelephonyManager.NETWORK_TYPE_LTE:
return NETWORK_TYPE_4G;
}
} else if (info.getType() == ConnectivityManager.TYPE_WIFI) {
return NETWORK_TYPE_WIFI;
}
}
return NETWORK_TYPE_NONE;
}
public static final int NETWORK_TYPE_NONE = 0;
public static final int NETWORK_TYPE_2G = 2;
public static final int NETWORK_TYPE_3G = 3;
public static final int NETWORK_TYPE_4G = 4;
public static final int NETWORK_TYPE_WIFI = 10;
private String getNetType() {
int type = getNetworkType(mContext);
String netType = "";
switch (type) {
case Utils.NETWORK_TYPE_NONE:
netType = "";
break;
case Utils.NETWORK_TYPE_2G:
netType = "2G";
break;
case Utils.NETWORK_TYPE_3G:
netType = "3G";
break;
case Utils.NETWORK_TYPE_4G:
netType = "4G";
break;
case Utils.NETWORK_TYPE_WIFI:
netType = "wifi";
break;
}
return netType;
}
2.实时监听网络切换
实现监听网络的功能主要依靠 广播监听 。不多说 看代码。回调中逻辑改成自己的就可以了。
oncreate中 需要注册一下 广播
mNetworkReceiver = new NetTypeReceiver();
registerReceiver(mNetworkReceiver, intent);
ondestory中需要将广播销毁
if (mNetworkReceiver != null) {
unregisterReceiver(mNetworkReceiver);
mNetworkReceiver = null;
}
private class NetTypeReceiver extends BroadcastReceiver {
String type = "";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(
Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isAvailable()) {
String name = networkInfo.getTypeName();
switch (networkInfo.getType()) {
case 0://移动 网络
if (TextUtils.isEmpty(type)) {
type = name;
}
break;
case 1:wifi网络
if (TextUtils.isEmpty(type)) {
type = name;
}
break;
}
} else {// 无网络
//network was unavailable, stop the streamer, and show a dialog
showNetworkInvalidView(R.string.network_error_message);
type = "";
}
}
}
}
相关文章
- LibreOffice 7.5 发布:漂亮的新应用图标和酷炫功能
- elementary OS 7 发布
- Windows 应用兼容层 Wine 8.1 发布:默认启用“Windows 10”前缀
- 微软正测试新功能:当 Windows 11 有新的小组件可用时会提醒通知
- 解析分布式存储选型和应用九个典型问题
- ClickHouse在自助行为分析场景的实践应用
- Chrome DevTools 远程调试安卓网页的原理
- Uni-app + Vue3 页面如何跳转及传参?
- 微软证实系统还原点会损坏 Windows 11 22H2 版本应用程序
- 巧用 Transition 实现短视频 APP 点赞动画
- 初学者试试,HarmonyOS应用开发者基础认证
- 媒体实测微软 Windows 开发工具包 2023:存在不兼容 HDR 显示器、某些应用无法运行等问题
- 快速了解Navigator API SetAppBadge
- 微软 Windows 11 Dev 预览版 Build 25276 发布,应用兼容问题对话框 UI 改进
- 基于Next.js、Prisma、Postgres和Fastfy构建全栈APP
- 开始菜单搜索框变圆角,微软 Windows 11 Beta 预览版 22621.1095 和 22623.1095 发布
- 2022-2023 十大应用开发趋势
- 观远数据发布业内首部《移动BI白皮书》,深入业务数字化场景重新定义移动BI
- Windows 10 学院:不借助第三方工具如何卸载 Windows 10 预装应用
- 正处高质量发展期,我国大数据产业突破1.3万亿元