广播接受者判断网络连接状态
需求:网络连接分三种状态:无网络、移动数据、WIFI
public class ConnectionChangeReceiver extends BroadcastReceiver { private AlertDialog alertDialog; //标记的作用是为了避免对话框弹出多次 private boolean isConnect = false;//标记是否连接 private boolean isGPRS = false;//标记连接方式是移动网络 private boolean isWifi = false;//标记连接方式是wifi @Override public void onReceive(final Context context, Intent intent) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Service.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = cm.getActiveNetworkInfo(); //无网络状态 if(networkInfo == null || !networkInfo.isConnected()){ if(isConnect){ alertDialog = new AlertDialog(context).builder(); alertDialog.setTitle("已关闭移动数据"); alertDialog.setMsg("您可以在“设置”中为此应用打开移动数据。"); alertDialog.setPositiveButton("好", new View.OnClickListener() { @Override public void onClick(View v) { } }); alertDialog.setNegativeButton("设置", new View.OnClickListener() { @Override public void onClick(View v) { context.startActivity(new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS)); } }); LogHelp.i("dialog","dialog1"); isGPRS = false; isWifi = false; isConnect = false; alertDialog.show(); } }else if (networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) { if(!isGPRS){ //只有GPRS,没有wifi的状态 alertDialog = new AlertDialog(context).builder(); alertDialog.setTitle("流量使用提示"); alertDialog.setMsg("当前网络无Wi-Fi,继续播放可能会被运营商收取流量费用"); alertDialog.setPositiveButton("继续播放", new View.OnClickListener() { @Override public void onClick(View v) { } }); alertDialog.setNegativeButton("停止播放", new View.OnClickListener() { @Override public void onClick(View v) { } }); LogHelp.i("dialog", "dialog2"); isWifi = false; isGPRS = true; isConnect = true; alertDialog.show(); } }else if(networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_WIFI){ if(!isWifi){ LogHelp.i("dialog", "dialog3"); isGPRS = false; isConnect = true; isWifi = true; } } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现