Android(安卓)判定网络连接状态 以及监听网络链接状态的变化
16lz
2021-01-26
在实习的项目中经常会有需要判定网络链接状态和坚听网络状态变化的需求,由于经常会用到这个,我也将判定当前网络状态的代码封装成一个工具类,并结合这个工具类写了一个专门的网络状态监听器,结合接口来让app在不同的网络状态下做不同的事情,让app更加人性化,实习的时候没有多少时间总结,现在来总结一下。
在 系统版本小于21之前 ,使用以下的方式获取当前网络状态:先利用Context对象获取ConnectivityManager对象,然后利用ConnectivityManager对象获取NetworkInfo对象,然后根据NetworkInfo对象的类型来返回不同的网络状态。有三种,移动,Wi-Fi,无网络连接。
在 系统21及之后 ,获取网络连接状态的方式:利用ConnectivityManager对象获取所有的网络连接信息,然后遍历每个网络连接,获取相应的NetworkInfo,然后根据NetworkInfo对象的类型来返回不同的网络状态。
以下是封装好的工具类:
import android.content.Context;import android.net.ConnectivityManager;import android.net.Network;import android.net.NetworkInfo;import android.widget.Toast;/** * Created by Yang on 2017/8/15. */public class NetUtil { /** * 没有连接网络 */ public static final int NETWORK_NONE = -1; /** * 移动网络 */ public static final int NETWORK_MOBILE = 0; /** * 无线网络 */ public static final int NETWORK_WIFI = 1; public static Context mContext; public static void init(Context context) { mContext = context; } public static int getNetWorkState() { if (mContext == null) { throw new UnsupportedOperationException("please use NetUtils before init it"); } // 得到连接管理器对象 if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) { ConnectivityManager connectivityManager = (ConnectivityManager) mContext .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = connectivityManager .getActiveNetworkInfo(); if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) { if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_WIFI)) { return NETWORK_WIFI; } else if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_MOBILE)) { return NETWORK_MOBILE; } } else { return NETWORK_NONE; } }else{ ConnectivityManager connMgr = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); //获取所有网络连接的信息 Network[] networks = connMgr.getAllNetworks(); //通过循环将网络信息逐个取出来 for (int i=0; i < networks.length; i++){ //获取ConnectivityManager对象对应的NetworkInfo对象 NetworkInfo networkInfo = connMgr.getNetworkInfo(networks[i]); if (networkInfo.isConnected()) { if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) { return NETWORK_MOBILE; }else{ return NETWORK_WIFI; } } } } return NETWORK_NONE; }}
2. 监听系统网络状态的变化:
public class NetBroadcastReceiver extends BroadcastReceiver { private final static String TAG = "NetBroadcastReceiver"; public static NetEvevt evevt; @Override public void onReceive(final Context context, Intent intent) { if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) { int netWorkState = NetUtil.getNetWorkState(); if (evevt != null) { evevt.onNetChange(netWorkState); } } } // 自定义接口 public interface NetEvevt { public void onNetChange(int netMobile); } public static void setEvevt(NetEvevt evevt1) { evevt = evevt1; }}
通过接口,你可以根据不同的网络状态来做不同的事情。
静态注册 网络状态监听器在 7.0即系统24 之后是 失效 的,接收不到系统广播的。只能通过 动态注册 。
注册监听网络状态监听器的时候请注意声明相对应的权限!!!
以上就是所有关于判定网络状态以及监听网络状态的博客啦,希望对你有所帮助,谢谢观看!感谢其他博主的分享!
更多相关文章
- 基于android的网络音乐播放器-网络音乐的搜索和展示(五)
- Android中的缓存策略—拉取网络图片,缓存本地
- Android多媒体学习七:访问网络上的Audio对应的M3U文件,实现网络音
- Evenbus思想解决切换网络高级处理(初级篇)
- Android(安卓)的网络判定(网络连接类型和监听网络连接变化)
- android手机震动的节奏例子--Vibrator对象及周期运用
- Android(安卓)OpenGL纹理
- 【Android开发精要笔记】Android的Intent机制
- android内存问题详解--重要