美文网首页android开发技巧Utils
Android判断手机网络信号强弱等问题

Android判断手机网络信号强弱等问题

作者: 奔跑的佩恩 | 来源:发表于2020-04-17 01:00 被阅读0次

    前言

    在Android开发过程中,我们经常会用到关于网络的判断问题。在app与服务器通讯之前做一个网络是否连接的判断是十分必要的。那么,关于手机网络连接都有哪些方面的判断呢,今天我重整代码,封装一个网络连接工具类NetUtil,下面就让我们来了解下它都具备哪些论断吧。

    今天涉及内容:

    1. NetUtil 简介
    2. NetUtil 在MainActivity中的使用
    3. 效果图和项目结构图
    4. NetUtil 源码

    先来波效果图


    2.gif

    一.NetUtil 简介

    NetUtil是一个网络连接判断的工具类,其具备判断手机是否已经连接网络,手机网络(4G流量)是否连接,手机wifi开关是否打开,手机WiFi是否已经连接,网络连接类型,获取当前网络连接强/弱,连接类型及当前连接信号强度等方法。具体如下:

        /***
         * 检查网络是否可用
         *
         * 需要权限 ACCESS_NETWORK_STATE
         * @param context
         * @return
         */
        public static boolean isNetworkConnected(Context context)
    
        /**
         * 检查手机网络(4G/3G/2G)是否连接
         *
         * @param context
         * @return boolean
         */
        public static boolean isMobileNetworkConnected(Context context)
    
        /**wifi是否打开**/
        public static boolean isWifiEnabled(Context context)
    
        /**检查WIFI是否连接**/
        public static boolean isWifiConnected(Context context)
    
        /**
         * 检测在连接网络类型 1.无网络(这种状态可能是因为手机停机,网络没有开启,信号不好等原因) 2.使用WIFI上网 3.CMWAP(中国移动代理)
         * 4.CMNET上网 获取当前的网络状态 -1:没有网络 1:WIFI网络2:wap网络3:net网络
         */
        @SuppressLint("DefaultLocale")
        public static String getNetType(Context context)
    
        /**获取网络信号强弱**/
        public static void signal(Context context,SignalStrengthLietener listener)
    
        /**
         * 获取wifi网络信号强度值
         * 需要 ACCESS_WIFI_STATE 权限
         * @param context
         * @return
         */
        public static int getWifiLevel(Context context)
    
        /**获取手机信号强度值**/
        public static void getMobileDbm(Context context, MobileSignalListener mobileSignalListener)
    
    

    二.NetUtil 在MainActivity中的使用

    下面,让我们通过NetUtilMainActivity中的使用来了解NetUtil具备哪些功能吧:

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
        private static final int PERMISSION_CODE=1234;
    
        private TextView mTextView;
        private Button mButton1;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //初始化控件
            initView();
            //设置监听
            setListener();
            //申请权限
            requestPermission(MainActivity.PERMISSION_CODE);
    
        }
    
    
        private void requestPermission(int requestCode) {
            String permissions[] = {
                    Manifest.permission.CAMERA,
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE};
            PermissionHelper.getInstance().checkPermissions(permissions, requestCode, MainActivity.this);
        }
    
        @PermissionSuccess(requestCode = MainActivity.PERMISSION_CODE)
        public void requestSuccess() {
            //申请到权限后的处理
            //......
    
            LogUtil.i("=====权限申请成功======");
        }
    
        @PermissionFail(requestCode = MainActivity.PERMISSION_CODE)
        public void requestFail() {
            //未获取到权限的处理
            //......
    
            LogUtil.i("=====权限申请失败======");
        }
    
        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
            PermissionHelper.getInstance().onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    
        private void initView(){
            mTextView=findViewById(R.id.tv);
            mButton1=findViewById(R.id.btn1);
        }
    
        private void setListener(){
            mButton1.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
           switch (v.getId()) {
               case R.id.btn1://测试
                   test();
                   break;
               default:
                   break;
           }
        }
    
        private void test() {
            StringBuffer buffer=new StringBuffer();
            boolean flag1=NetUtil.isNetworkConnected(MainActivity.this);
            buffer.append("手机是否已经联网:"+flag1+"\n");
    
            boolean flag2=NetUtil.isMobileNetworkConnected(MainActivity.this);
            buffer.append("手机网络(流量)是否连接:"+flag2+"\n");
    
            boolean flag3=NetUtil.isWifiEnabled(MainActivity.this);
            buffer.append("手机wifi开关是否打开:"+flag3+"\n");
    
            boolean flag4=NetUtil.isWifiConnected(MainActivity.this);
            buffer.append("手机wifi是否连接:"+flag4+"\n");
    
            String type=NetUtil.getNetType(MainActivity.this);
            buffer.append("网络连接类型:"+type+"\n");
    
            NetUtil.signal(MainActivity.this, new NetUtil.SignalStrengthLietener() {
                @Override
                public void strong(String type, int dbm) {
                    if(NetUtil.MOBILE.equals(type)){
                        buffer.append("网络信号强,当前连接是手机网络,信号强度为:"+dbm+"\n");
                    }else if(NetUtil.WIFI.equals(type)){
                        buffer.append("网络信号强,当前连接是wifi网络,信号强度为:"+dbm+"\n");
                    }
    
                    String result=buffer.toString();
                    mTextView.setText(result);
                }
    
                @Override
                public void weak(String type, int dbm) {
                    if(NetUtil.MOBILE.equals(type)){
                        buffer.append("网络信号弱,当前连接是手机网络,信号强度为:"+dbm+"\n");
                    }else if(NetUtil.WIFI.equals(type)){
                        buffer.append("网络信号弱,当前连接是wifi网络,信号强度为:"+dbm+"\n");
                    }
    
                    String result=buffer.toString();
                    mTextView.setText(result);
                }
    
                @Override
                public void disConnect() {
                    buffer.append("手机未连接网络\n");
    
                    String result=buffer.toString();
                    mTextView.setText(result);
                }
            });
        }
    }
    

    大家主要关注test()方法就好。

    三.效果图和项目结构图

    2.gif
    image.png

    四.NetUtil 源码

    NetUtil 源码如下:

    相关文章

      网友评论

        本文标题:Android判断手机网络信号强弱等问题

        本文链接:https://www.haomeiwen.com/subject/gghsvhtx.html