栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android中判断应用运行时是否有网络连接并弹出对话框提示 全局提示和指定页面或点击事件提示

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android中判断应用运行时是否有网络连接并弹出对话框提示 全局提示和指定页面或点击事件提示

做项目时遇到需求,要在指定页面判断网络是否连接,如果无连接则需要提示对话框,将解决流程记录下来.
  • 首先需要在AndroidManifest文件中添加网络访问和网络状态权限


  • 判断应用是否有网络的工具类,如果没网络弹出对话框,需手动开启网络
  • 这里的Context不清楚的可以看我另一篇文章:Android安卓 如何在Service获取参数Context 以及alertDialog.Builder(Context)的Context
public class NetworkUtils {
    
    public static boolean isNetworkAvalible(Context context) {
        //检测API是不是小于23,因为到了API23之后getNetworkInfo(int networkType)方法被弃用
        if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP){
            //获得ConnectivityManager对象
            ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            //获取WIFI连接的信息
            NetworkInfo wifiNetworkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            //获取移动数据连接的信息
            NetworkInfo dataNetworkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
            //无线网连接和数据网连接都断开
            if (!wifiNetworkInfo.isConnected() && !dataNetworkInfo.isConnected()) {
                return false;
            }
            //无线网连接和数据网连接一个
            return true;
            //API大于23时使用下面的方式进行网络监听
        }else{
            // 获得网络状态管理器
            ConnectivityManager connectivityManager = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            if (connectivityManager == null) {
                return false;
            } else {
                // 建立网络数组
                NetworkInfo[] net_info = connectivityManager.getAllNetworkInfo();
                if (net_info != null) {
                    for (int i = 0; i < net_info.length; i++) {
                        // 判断获得的网络状态是否是处于连接状态
                        if (net_info[i].getState() == NetworkInfo.State.CONNECTED) {
                            return true;
                        }
                    }
                }
            }
            return false;
        }
    }

    // 如果没有网络,则弹出网络设置对话框
    public static void checkNetwork(final Context context) {
        if (!NetworkUtils .isNetworkAvalible(context)) {
            new alertDialog.Builder(context)
                    .setTitle("网络状态提示")
                    .setMessage("没有可以使用的网络,请先设置网络!")
                    .setCancelable(false)
                    .setIcon(R.mipmap.logo)
                    .setPositiveButton("设置",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                                    int whichButton) {
                                    // 跳转到设置界面
                                    context.startActivity(new Intent(
                                                    Settings.ACTION_WIRELESS_SETTINGS));
                                }
                            }).create().show();
        }
        return;
    }
}
  • 如果需要全局提示接着按下面的步骤来
  • 创建一个NetWorkStateReceiver类,继承BroadcastReceiver,调用checkNetwork()方法,保证在调用此方法的activity中都能检测到网络是否连接
public class NetWorkStateReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        NetworkUtils .checkNetwork(context);
    }
}
  • 在xxxActivity中显式的注册和取消注册广播,在onResume()方法中注册,在onPause()方法中取消注册
private NetWorkStateReceiver mNetWorkStateReceiver;

@Override
protected void onResume() {
        if (mNetWorkStateReceiver== null) {
            mNetWorkStateReceiver= new NetWorkStateReceiver();
        }
        IntentFilter filter = new IntentFilter();
        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        registerReceiver(mNetWorkStateReceiver, filter);
        super.onResume();
}

@Override
protected void onPause() {
        unregisterReceiver(mNetWorkStateReceiver);
        super.onPause();
}

以上是全局提示

  • 接下来是局部提示,如果app支持离线操作只需要,在特定的页面提示需要连接网络即可.
  • 在Service层中
  • 如果需要在刚进入页面时就提示,则需要在Service层中的init方法中添加NetworkUtils.checkNetwork(xxxActivity.xxx);方法即可
  • 如果需要点击某个按钮触发,则只需在对应按钮的点击事件中添加上方代码即可
  • 结束

参考:https://blog.csdn.net/zxc514257857/article/details/59175179?

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/307109.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号