当前位置:首页 » 安卓系统 » android网络类型判断

android网络类型判断

发布时间: 2023-12-25 00:09:32

安卓手机如何选择网络如2G,3G,4G的切换。

手机选择【设置】→无线和网络里面有个【数据连接】→选中它→有个【网络模式】→点一下选中【3G/2G】就行了。

㈡ Android 超简单实现网络状态的监听

我们做项目的时候,不可避免的要做网络状态的监听,一般我们都是抽取出一个工具类来实现,比如:

细致的你当然还会再写一个判断网络类型的方法,反手再来一个例:

然后就可以在相应的操作前进行判断网络的判断:

但是这样做也有些问题:

接下来就是本文的重点,如何通过 NetStatusBus 这个库来解决以上问题,让你的网络状态监听变得前所未有的简单粗暴。

到这里就已经结束了,你的所有网络操作已经都可以清晰优雅的在订阅方法中进行处理了,当然你也可以继续往下看。

订阅方法必须填写一个NetType参数,可以通过NetType的值来判断当前网络类型。

@NetSubscribe中 netType为可选值,可以设置订阅的类型,可选值类型如下:

NetType.AUTO

这是默认值,任何网络状态发生变化,该类型订阅者都会被回调。同时会传入NetType参数告知你当前的网络类型,示例如下:

只要当前是由 WIFI 改变引发的网络状态变化,该类型订阅者都会被回调。同时会传入NetType参数告知你当前的网络类型,示例如下:

只要当前是由移动网络改变引发的网络状态变化,该类型订阅者都会被回调。同时会传入NetType参数告知你当前的网络类型,示例如下:

NetType.NONE

只有当网络丢失时,该类型订阅者才会被回调。

有人会觉得,我用个库爽就行了管它的原理干什么?

你放心,我只是小小的描述一下实现方式。

原理简单来说,就是在全局初始化的时候就绑定对网络的变化监听。然后将进行注册的父类所有的订阅方法保存至集合中,这里涉及到一些方法的校验,最后在网络状态发生改变时利用 java 反射机制遍历执行所有订阅方法。熟悉 EventBus 的小伙伴已经看出来了这里借鉴了一小部分 EventBus 的思想。

回到第一步,那么具体是如何绑定对网络状态变化的监听呢?

以前我们是通过注册广播来实现绑定网络变更的监听,在Android 7.0 以后,Google 基于性能和安全原因对广播进行了很多限制,比如监听网络变更的广播 android.net.conn.CONNECTIVITY_CHANGE 使用静态注册的方式则无法生效,而动态注册的方式虽然可以生效但毕竟不是最优解。

同样出于性能和安全,以及拥抱变化的角度,最终我们还是使用官方推荐的方式,利用 ConnectivityManager.NetworkCallback 来进行网络变化的监听,这是在Android 5.0即android api 21推出的API,目前Android 5.0以上的市场占有率在 85%以上,随着国内各大厂商正在积极的推进适配普及Android Q,这个比例还会进一步增大,所以个人人认为无需过于担心低版本适配。

使用的时候出现这个问题是由于少添加了权限。

Caused by: java.lang.SecurityException: ConnectivityService: Neither user 10513 nor current process has android.permission.ACCESS_NETWORK_STATE.

java.lang.RuntimeException: Unable to create application com.jiyun.wanandroid.WanApplication: java.lang.SecurityException: ConnectivityService: Neither user 10513 nor current process has android.permission.ACCESS_NETWORK_STATE.

加上这几个权限就好了:

附上原文地址: https://www.jianshu.com/p/2fea980b3e56

㈢ android 判断是否有网络连接

ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = connectivity.getActiveNetworkInfo();
if(info != null && info.isAvailable()){
if (netInfo.getType() == ConnectivityManager.TYPE_WIFI) {
//WiFi网络
} else if (netInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
//移动网络
} else {
//网络错误
}
}else{
//网络错误
}

热点内容
win7ftp用户名和密码设置 发布:2025-01-22 17:46:48 浏览:220
三表联查的sql语句 发布:2025-01-22 17:27:13 浏览:417
安卓怎么解压分卷压缩 发布:2025-01-22 17:24:59 浏览:720
欧姆龙plc编程语言 发布:2025-01-22 17:21:48 浏览:395
和值编程 发布:2025-01-22 17:20:07 浏览:517
微信青少年模式独立密码是什么 发布:2025-01-22 16:52:06 浏览:589
腾讯云服务器怎么购买 发布:2025-01-22 16:45:01 浏览:630
天猫怎么上传视频 发布:2025-01-22 16:40:02 浏览:727
安卓如何把抖音评论换成黑色 发布:2025-01-22 16:30:57 浏览:702
连接池Java 发布:2025-01-22 16:28:27 浏览:260