
Android Q网络状态判断,亲测可用
发布日期:2021-05-08 18:10:54
浏览次数:14
分类:原创文章
本文共 3809 字,大约阅读时间需要 12 分钟。
package com.example.androidinterviewjxd.utils;import android.content.Context;import android.net.ConnectivityManager;import android.net.Network;import android.net.NetworkCapabilities;public class NetworkUtils { /** * 判断当前网络是否连接 * @param context * @return */ public static boolean isNetworkConnected(Context context){ ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); Network network = connectivityManager.getActiveNetwork(); NetworkCapabilities networkCapabilities = connectivityManager.getNetworkCapabilities(network); return networkCapabilities!=null; } /** * 判断当前的网络类型是wifi,流量还是有线网络 * @param context * @return */ public static String getCurrentNetworkType(Context context){ ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); Network network = connectivityManager.getActiveNetwork(); NetworkCapabilities networkCapabilities = connectivityManager.getNetworkCapabilities(network); if(networkCapabilities==null){ return "no network"; }else if(networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)){ return "Wifi"; }else if(networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)){ return "Mobile"; }// else if(networkCapabilities.hasCapability(NetworkCapabilities.TRANSPORT_ETHERNET)){// return "Ethernet";// } return "other"; }}
以上是网络状态判断,网络状态注册监听和解注册的代码如下:
private static ConnectivityManager connectivityManager; public static void registerNetworkListener(Context context){ if (connectivityManager==null){ connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); } NetworkRequest.Builder builder = new NetworkRequest.Builder(); NetworkRequest request = builder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .build(); connectivityManager.requestNetwork(request,networkCallback); } public static void unRegisterNetworkListener(Context context){ if (connectivityManager==null){ connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); } connectivityManager.unregisterNetworkCallback(networkCallback); } private static ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback(){ @Override public void onAvailable(@NonNull Network network) { super.onAvailable(network); } @Override public void onLosing(@NonNull Network network, int maxMsToLive) { super.onLosing(network, maxMsToLive); } @Override public void onLost(@NonNull Network network) { super.onLost(network); } @Override public void onUnavailable() { super.onUnavailable(); } @Override public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) { super.onCapabilitiesChanged(network, networkCapabilities); } @Override public void onLinkPropertiesChanged(@NonNull Network network, @NonNull LinkProperties linkProperties) { super.onLinkPropertiesChanged(network, linkProperties); } @Override public void onBlockedStatusChanged(Network network, boolean blocked) { super.onBlockedStatusChanged(network, blocked); } };
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月02日 02时02分40秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
C++ 子类对象直接赋值给父类对象可行,反过来不行
2019-03-06
linux下同一个动态库名为何辣么多的.so文件
2019-03-06
SQL联表的方式(逗号, Left Join, Right Join)
2019-03-06
牛客网输入输出举例
2019-03-06
字符串初始化时的注意点
2019-03-06
软考相关试题
2019-03-06
顺序表的操作
2019-03-06
常量表达式
2019-03-06
POD类型
2019-03-06
const与常量,傻傻分不清楚~
2019-03-06
Head First设计模式——迭代器模式
2019-03-06
MongoDB版本及存储引擎区别
2019-03-06
shell echo单行和多行文字定向写入到文件中
2019-03-06
AtCoder Beginner Contest 100 题解
2019-03-06
【数据结构】可持久化线段树初步
2019-03-06
后缀树
2019-03-06
Java高性能编程之CAS与ABA及解决方法
2019-03-06
从BIO到Netty的演变
2019-03-06
《算法导论》第二章笔记
2019-03-06
HTML节点操作
2019-03-06