Android检测wifi信号强度,检测网络是否通畅

Android检测wifi信号强度,检测网络是否通畅,第1张

信号强弱检测
/**
 * @ClassName: WifiCheckUtils
 * @Description: 页面切换 检测wifi信号强弱
 * @Author: 有时有晌
 * @Date: 2022/1/26 16:00
 */
object WifiCheckUtils {
    fun checkWifiLevle(context:Context,isConnect:Boolean):Int{
        var wifiType = 3
        try {
            var wifiManager = context!!.getSystemService(Context.WIFI_SERVICE) as WifiManager
            var wifiInfo = wifiManager.connectionInfo as WifiInfo
            var wifiLever = wifiInfo.rssi
            if (isConnect){
                when (wifiLever) {
                    in -50..0 -> {//信号最强
                        wifiType = 0
                    }
                    in -70..-50 -> {//较强
                        wifiType = 1
                    }
                    in -80..-70 -> {//较弱
                        wifiType = 2
                    }
                    in -100..-80 -> {//微弱
                        wifiType = 3
                    }
                    else->{
                        wifiType = 3
                    }
                }
                LogUtil.e("TAG","==-->WiFi信号强度$wifiType")
                setWifiLevel(wifiType)
            }
        } catch (e: Exception) {
        }
        return wifiType
    }
    /**
     * 设置wifi信号等级,这里是设置MainActivity页面的wifiLevel,用来设置wifi强度
     */
    private fun setWifiLevel(wifiLevel:Int){
        try {
            MainActivity.act.wifiLevel = wifiLevel
        } catch (e: Exception) {
        }
    }
}

如上同时可以搭配检测wifi是否通畅代码一块使用
搭配网络实时流量检测使用
Android实时检测网络(流量监控)直接复制可用

检测网络是否正常

利用ping功能来实现,跟电脑上ping效果一样

具体实现

/**
 * @ClassName: CheckNetStatus
 * @Description: 检测网络状态是否通畅
 * @Author: 有时有晌
 * @Date: 2022/1/24 16:47
 */
object CheckNetStatus {
    val TAG="CheckNetStatus"
    fun check(mContext:Activity,netStatusCallBack: NetStatusCallBack){
        var url ="www.baidu.com"
        //TaskManager 这个类是我本地在用的,大家用时候随便开个线程什么的就可以了。
        TaskManager.getInstance().execRunnable {
           LogUtil.e(TAG,"==-->WIFI可用检测")
           val stringBuilder = StringBuilder()
           val netState = toCheck(url, stringBuilder)
           LogUtil.e(TAG, "ping ${url} content \n${stringBuilder.toString()}")
           LogUtil.e(TAG, "ping ${url} state:${netState}")
           mContext.runOnUiThread {
               netStatusCallBack.netStatus(netState)
           }
       }
    }
    fun toCheck(ipAddress: String, stringBuilder: StringBuilder): Boolean {
        var result: String? = null
        try {
            var ip = "www.baidu.com" // ping 的地址,可以换成任何一种可靠的外网
            if (!TextUtils.isEmpty(ipAddress)) {
                ip = ipAddress
            }
            val p = Runtime.getRuntime().exec("ping -c 4 -w 100 $ip") // ping网址4次 响应100ms
            // 读取ping的内容,可以不加
            val input = p.inputStream
            val bufferedReader = BufferedReader(InputStreamReader(input))
            var content: String? = ""
            while (bufferedReader.readLine().also { content = it } != null) {
                stringBuilder.append(content)
                stringBuilder.append("\n")
            }
            // ping的状态
            val status = p.waitFor()
            if (status == 0) {
                result = "success"
                return true
            } else {
                result = "failed" //PING www.a.shifen.com (180.101.49.11) 56(84) bytes of data.   //64 bytes from 180.101.49.11: icmp_seq=2 ttl=49 time=53.3 ms  //64 bytes from 180.101.49.11: icmp_seq=3 ttl=49 time=51.3 ms  //64 bytes from 180.101.49.11: icmp_seq=4 ttl=49 time=50.2 ms
            }
        } catch (e: IOException) {
            result = "IOException"
        } catch (e: InterruptedException) {
            result = "InterruptedException"
        } finally {
            LogUtil.e(TAG, "result = $result")
        }
        return false
    }
    interface NetStatusCallBack{
        fun netStatus(isConnect:Boolean)
    }
}
调用 在需要响应的页面中增加对应的执行方法,依次调用即可,网络检测,信号检测,可根据需求更改为定时轮询请求,以保证实时检测效果

MainActivity中方法

 /**
     * wifi信号level
     * @param wifiLevel
     */
    public void setWifiLevel(int wifiLevel){
        switch (wifiLevel) {
            case 0:
                iv_net_status.setBackgroundResource(R.drawable.wifi_success0);
                break;
            case 1:
                iv_net_status.setBackgroundResource(R.drawable.wifi_success1);
                break;
            case 2:
                iv_net_status.setBackgroundResource(R.drawable.wifi_success2);
                break;
            default:
                iv_net_status.setBackgroundResource(R.drawable.wifi_success3);
                break;
        }
    }
    /**
     * 设置网络连接状态
     * 网络变化触发广播,广播变化触发检测网络
     * @param isConnect
     */
    public void setNetIv(boolean isConnect){
        if (isConnect){
            iv_net_status.setBackgroundResource(R.drawable.wifi_success3);
        }else{
            iv_net_status.setBackgroundResource(R.drawable.wifi_error);
        }
        CheckNetStatus.INSTANCE.check(this, new CheckNetStatus.NetStatusCallBack() {
            @Override
            public void netStatus(boolean isConnect) {
                if (isConnect){
                    iv_net_status.setBackgroundResource(R.drawable.wifi_success);
                    setWifiLevel(WifiCheckUtils.INSTANCE.checkWifiLevle(MainActivity.this, true));
                }else{
                    iv_net_status.setBackgroundResource(R.drawable.wifi_error);
                }
            }
        });
    }

贡献一波信号强度图片

![网络断开,看不到直接复制这个地址打开](http://www.kaotop.com/file/tupian/20220518/97c1351d919546968e63bfac2fcdb358.png)
信号强度满格 背景色灰白所以看不见,找不到了就是csdn的问题

![信号强度满格,看不到直接复制这个地址打开](http://www.kaotop.com/file/tupian/20220518/f92dacf09da747f7963211f1005e50c3.png)
信号3格 背景色灰白所以看不见,找不到了就是csdn的问题

![信号3格,看不到直接复制这个地址打开](http://www.kaotop.com/file/tupian/20220518/1b3663cb281f4f83a292545cf9894a9d.png)
信号2格 背景色灰白所以看不见,找不到了就是csdn的问题

![信号2格,看不到直接复制这个地址打开](http://www.kaotop.com/file/tupian/20220518/88ec1292354945848778053317b9a54f.png)
信号1格 背景色灰白所以看不见,找不到了就是csdn的问题

![信号一格,看不到直接复制这个地址打开](http://www.kaotop.com/file/tupian/20220518/f91d61924c4e4527af1105c7cf71b634.png)

可以扩展一下,当网络检测执行时,可将上述的网络信号制作成帧动画,可以实时显示检测效果。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/992212.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存