每个app都会碰到这样的情况,这样的文章很多介绍。我今天用的是自己项目用的,直接在代码里用就可以了。

直接上代码

NetworkManagement.java 网络管理者

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.provider.Settings;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Log;public class NetworkManagement {public static final String CTWAP = "ctwap";public static final String CTNET = "ctnet";public static final String CMWAP = "cmwap";public static final String CMNET = "cmnet";public static final String NET_3G = "3gnet";public static final String WAP_3G = "3gwap";public static final String UNIWAP = "uniwap";public static final String UNINET = "uninet";public static final int TYPE_CT_WAP = 5;public static final int TYPE_CT_NET = 6;public static final int TYPE_CT_WAP_2G = 7;public static final int TYPE_CT_NET_2G = 8;public static final int TYPE_CM_WAP = 9;public static final int TYPE_CM_NET = 10;public static final int TYPE_CM_WAP_2G = 11;public static final int TYPE_CM_NET_2G = 12;public static final int TYPE_CU_WAP = 13;public static final int TYPE_CU_NET = 14;public static final int TYPE_CU_WAP_2G = 15;public static final int TYPE_CU_NET_2G = 16;public static final int TYPE_OTHER = 17;public static Uri PREFERRED_APN_URI = Uri.parse("content://telephony/carriers/preferapn");/** 没有网络 */public static final int TYPE_NET_WORK_DISABLED = 0;/** wifi网络 */public static final int TYPE_WIFI = 4;private static ConnectivityManager connectivityManager;private static NetworkInfo networkInfo;// <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>// <uses-permission android:name="android.permission.INTERNET"/>public NetworkManagement(Context context) {// TODO Auto-generated constructor stubcreateConnectivityManager(context);createNetworkInfo();// NetworkInfo [] networkInfos =// connectivityManager.getAllNetworkInfo();}public static void createConnectivityManager(Context context) {connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);}public static void createNetworkInfo() {// TelephonyManager telephonyManager =// (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);// int networkType = telephonyManager.getNetworkType();networkInfo = connectivityManager.getActiveNetworkInfo();}/*** 判断是否为漫游* * @param context* @return*/public static boolean isRoam(Context context) {if (connectivityManager == null) {createConnectivityManager(context);createNetworkInfo();}if (networkInfo == null)return false;if (!networkInfo.isConnected())return false;if (networkInfo.isRoaming())return true;return false;}/*** 判断网络是否可用* * @param context* @return*/public static boolean isNetworkAvailable(Context context) {createConnectivityManager(context);createNetworkInfo();if (networkInfo == null)return false;if (!networkInfo.isConnected())return false;if (networkInfo.isConnected())return true;return false;}/**** 判断Network具体类型(联通移动wap,电信wap,其他net)* * */public static int checkNetworkType(Context mContext) {try {final ConnectivityManager connectivityManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);final NetworkInfo mobNetInfoActivity = connectivityManager.getActiveNetworkInfo();if (mobNetInfoActivity == null || !mobNetInfoActivity.isAvailable())// 注意一:// NetworkInfo 为空或者不可以用的时候正常情况应该是当前没有可用网络,// 但是有些电信机器,仍可以正常联网,// 所以当成net网络处理依然尝试连接网络。// (然后在socket中捕捉异常,进行二次判断与用户提示)。return TYPE_NET_WORK_DISABLED;// NetworkInfo不为null开始判断是网络类型int netType = mobNetInfoActivity.getType();if (netType == ConnectivityManager.TYPE_WIFI)// wifi net处理return TYPE_WIFI;if (netType == ConnectivityManager.TYPE_MOBILE) {// 注意二:// 判断是否电信wap:// 不要通过getExtraInfo获取接入点名称来判断类型,// 因为通过目前电信多种机型测试发现接入点名称大都为#777或者null,// 电信机器wap接入点中要比移动联通wap接入点多设置一个用户名和密码,// 所以可以通过这个进行判断!boolean is3G = isFastMobileNetwork(mContext);final Cursor c = mContext.getContentResolver().query(PREFERRED_APN_URI, null, null, null, null);if (c != null) {c.moveToFirst();final String user = c.getString(c.getColumnIndex("user"));if (!TextUtils.isEmpty(user)) {if (user.startsWith(CTWAP))return is3G ? TYPE_CT_WAP : TYPE_CT_WAP_2G;if (user.startsWith(CTNET))return is3G ? TYPE_CT_NET : TYPE_CT_NET_2G;}}c.close();// 注意三:// 判断是移动联通wap:// 其实还有一种方法通过getString(c.getColumnIndex("proxy")获取代理ip// 来判断接入点,10.0.0.172就是移动联通wap,10.0.0.200就是电信wap,但在// 实际开发中并不是所有机器都能获取到接入点代理信息,例如魅族M9 (2.2)等...// 所以采用getExtraInfo获取接入点名字进行判断String netMode = mobNetInfoActivity.getExtraInfo();Log.i("", "==================netmode:" + netMode);if (netMode != null) {// 通过apn名称判断是否是联通和移动wapnetMode = netMode.toLowerCase();if (netMode.equals(CMWAP))return is3G ? TYPE_CM_WAP : TYPE_CM_WAP_2G;if (netMode.equals(CMNET))return is3G ? TYPE_CM_NET : TYPE_CM_NET_2G;if (netMode.equals(NET_3G) || netMode.equals(UNINET))return is3G ? TYPE_CU_NET : TYPE_CU_NET_2G;if (netMode.equals(WAP_3G) || netMode.equals(UNIWAP))return is3G ? TYPE_CU_WAP : TYPE_CU_WAP_2G;}}} catch (Exception ex) {ex.printStackTrace();return TYPE_OTHER;}return TYPE_OTHER;}private static boolean isFastMobileNetwork(Context context) {TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);switch (telephonyManager.getNetworkType()) {case TelephonyManager.NETWORK_TYPE_1xRTT:return false; // ~ 50-100 kbpscase TelephonyManager.NETWORK_TYPE_CDMA:return false; // ~ 14-64 kbpscase TelephonyManager.NETWORK_TYPE_EDGE:return false; // ~ 50-100 kbpscase TelephonyManager.NETWORK_TYPE_EVDO_0:return true; // ~ 400-1000 kbpscase TelephonyManager.NETWORK_TYPE_EVDO_A:return true; // ~ 600-1400 kbpscase TelephonyManager.NETWORK_TYPE_GPRS:return false; // ~ 100 kbpscase TelephonyManager.NETWORK_TYPE_HSDPA:return true; // ~ 2-14 Mbpscase TelephonyManager.NETWORK_TYPE_HSPA:return true; // ~ 700-1700 kbpscase TelephonyManager.NETWORK_TYPE_HSUPA:return true; // ~ 1-23 Mbpscase TelephonyManager.NETWORK_TYPE_UMTS:return true; // ~ 400-7000 kbpscase TelephonyManager.NETWORK_TYPE_EHRPD:return true; // ~ 1-2 Mbpscase TelephonyManager.NETWORK_TYPE_EVDO_B:return true; // ~ 5 Mbpscase TelephonyManager.NETWORK_TYPE_HSPAP:return true; // ~ 10-20 Mbpscase TelephonyManager.NETWORK_TYPE_IDEN:return false; // ~25 kbpscase TelephonyManager.NETWORK_TYPE_LTE:return true; // ~ 10+ Mbpscase TelephonyManager.NETWORK_TYPE_UNKNOWN:return false;default:return false;}}/*** 打开设置网络界面* */public static void setNetworkMethod(Context context) {Intent intent = null;// 判断手机系统的版本 即API大于10 就是3.0或以上版本// intent = new Intent(Settings.ACTION_APN_SETTINGS);// startActivity(intent);if (android.os.Build.VERSION.SDK_INT > 10) {intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);context.startActivity(intent);return;}intent = new Intent();ComponentName component = new ComponentName("com.android.settings","com.android.settings.WirelessSettings");intent.setComponent(component);intent.setAction("android.intent.action.VIEW");context.startActivity(intent);}/*** 打开wifi设置*/public static void setwifi(Context context) {// 3.0以上打开设置界面,也可以直接用ACTION_WIRELESS_SETTINGS打开到wifi界面if (android.os.Build.VERSION.SDK_INT > 10) {context.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS));return;}context.startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS));}public static void setSet(Context context) {//  com.android.settings.AccessibilitySettings 辅助功能设置//   com.android.settings.ActivityPicker 选择活动//   com.android.settings.ApnSettings APN设置//   com.android.settings.ApplicationSettings 应用程序设置//   com.android.settings.BandMode 设置GSM/UMTS波段//   com.android.settings.BatteryInfo 电池信息//   com.android.settings.DateTimeSettings 日期和坝上旅游网时间设置//   com.android.settings.DateTimeSettingsSetupWizard 日期和时间设置//   com.android.settings.DevelopmentSettings 应用程序设置=》开发设置//   com.android.settings.DeviceAdminSettings 设备管理器//   com.android.settings.DeviceInfoSettings 关于手机//   com.android.settings.Display 显示——设置显示字体大小及预览//   com.android.settings.DisplaySettings 显示设置//   com.android.settings.DockSettings 底座设置//   com.android.settings.IccLockSettings SIM卡锁定设置//   com.android.settings.InstalledAppDetails 语言和键盘设置//   com.android.settings.LanguageSettings 语言和键盘设置//   com.android.settings.LocalePicker 选择手机语言//   com.android.settings.LocalePickerInSetupWizard 选择手机语言//   com.android.settings.ManageApplications 已下载(安装)软件列表//   com.android.settings.MasterClear 恢复出厂设置//   com.android.settings.MediaFormat 格式化手机闪存//   com.android.settings.PhysicalKeyboardSettings 设置键盘//   com.android.settings.PrivacySettings 隐私设置//   com.android.settings.ProxySelector 代理设置//   com.android.settings.RadioInfo 手机信息//   com.android.settings.RunningServices 正在运行的程序(服务)//   com.android.settings.SecuritySettings 位置和安全设置//   com.android.settings.Settings 系统设置//   com.android.settings.SettingsSafetyLegalActivity 安全信息//   com.android.settings.SoundSettings 声音设置//   com.android.settings.TestingSettings 测试——显示手机信息、电池信息、使用情况统计、Wifi// information、服务信息//   com.android.settings.TetherSettings 绑定与便携式热点//   com.android.settings.TextToSpeechSettings 文字转语音设置//   com.android.settings.UsageStats 使用情况统计//   com.android.settings.UserDictionarySettings 用户词典//   com.android.settings.VoiceInputOutputSettings 语音输入与输出设置//   com.android.settings.WirelessSettings 无线和网络设置// Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);// context.startActivity(intent);Intent intent = new Intent(Settings.ACTION_SETTINGS);context.startActivity(intent);}/*** 移动网络开关*/private void toggleMobileData(Context context, boolean enabled) {ConnectivityManager conMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);Class<?> conMgrClass = null; // ConnectivityManager类Field iConMgrField = null; // ConnectivityManager类中的字段Object iConMgr = null; // IConnectivityManager类的引用Class<?> iConMgrClass = null; // IConnectivityManager类Method setMobileDataEnabledMethod = null; // setMobileDataEnabled方法try {// 取得ConnectivityManager类conMgrClass = Class.forName(conMgr.getClass().getName());// 取得ConnectivityManager类中的对象mServiceiConMgrField = conMgrClass.getDeclaredField("mService");// 设置mService可访问iConMgrField.setAccessible(true);// 取得mService的实例化类IConnectivityManageriConMgr = iConMgrField.get(conMgr);// 取得IConnectivityManager类iConMgrClass = Class.forName(iConMgr.getClass().getName());// 取得IConnectivityManager类中的setMobileDataEnabled(boolean)方法setMobileDataEnabledMethod = iConMgrClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);// 设置setMobileDataEnabled方法可访问setMobileDataEnabledMethod.setAccessible(true);// 调用setMobileDataEnabled方法setMobileDataEnabledMethod.invoke(iConMgr, enabled);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (NoSuchFieldException e) {e.printStackTrace();} catch (SecurityException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}}}

直接在基础的BaseActivity使用

BaseActivity.java

/*** 网络状况 ,没有网络跳转到无网络活动界面*/public void netWork() {if (!NetworkManagement.isNetworkAvailable(this)) {intent.setClass(this, NoNetworkActivity.class);intent.putExtra(Activity.TAG, this.getClass());startActivity(intent);finish();}}

NoNetworkActivity.java

import com.qpbox.R;
import com.qpp.util.NetworkManagement;import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;public class NoNetworkActivity extends BaseActivity implements OnClickListener {private Class c;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.no_network_activity);c = (Class) getIntent().getSerializableExtra(Activity.TAG);findViewById(R.id.flash_ly_refresh).setOnClickListener(this);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif (NetworkManagement.isNetworkAvailable(this)) {finish();intent.setClass(this, c);startActivity(intent);}}
}

no_network_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/background"android:orientation="vertical" ><LinearLayoutandroid:id="@+id/flash_ly_ll"android:layout_width="fill_parent"android:layout_height="fill_parent"android:gravity="center"android:orientation="horizontal" ><LinearLayoutandroid:id="@+id/flash_ly_refresh"android:layout_width="200dip"android:layout_height="200dip"android:gravity="center"android:orientation="vertical" ><ImageViewandroid:id="@+id/flash_ly_iv"android:layout_width="150dip"android:layout_height="150dip"android:src="@drawable/wifi" /><TextViewandroid:id="@+id/flash_ly_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="网络链接失败,点击重试"android:textSize="15dip" /></LinearLayout></LinearLayout></LinearLayout>

最后 记得设置权限

// <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>// <uses-permission android:name="android.permission.INTERNET"/>

andriod 无网络逻辑设置和判断相关推荐

  1. 小米pro显示无服务器,【解决】小米WiFi放大器pro连接不稳定/连接后无网络的问题!!!...

    首先说明一下,我分享的方法并不是根治问题的办法,放大器信号不稳定或者无网络连接的情况还是会有(你想要信号放大器达到线连的稳定和速度?散了吧散了吧),但是每次问题出现的时候,使用我的办法处理,绝对是相对 ...

  2. 无盘疑难杂症的处理和网络的设置(转)

    现在想大家分享一下我个人的经验和故障处理心得,说不好别见怪,个人表达能力所限,呵呵.比方:网吧一台工作站故障,情况是这样"工作站启动时,网卡灯时亮时不亮,多开几次机又正常,但正常的时候却发现 ...

  3. 【抓包工具】配置:Fiddler 设置 APP 抓包成功,微信小程序却无网络问题解决

    目录 一.问题情况:微信小程序无网络 二.问题解决:微信小程序无网络 三.问题情况:APP 无网络 四.问题解决:APP 无网络 一.问题情况:微信小程序无网络 fiddler 配置 https 成功 ...

  4. fidder手机抓包设置后无网络的解决办法

    升级了fiddler到4.6版本,手机设置代理后提示无网络,试试以下解决方法: 1.fiddler升级后对应的.net framework也要升级,安装最新的.net framework 4.6,升级 ...

  5. Altium AD20设置过孔盖油,默认规则盖油,无网络普通过孔盖油

    AD20在3D视图下可对过孔盖油进行显示. 文章后期已被更正,通过 设计规则 来实现完美的 过孔盖油 效果:https://blog.csdn.net/Mark_md/article/details/ ...

  6. Debian10Standard无网络安装后,设置静态IP,安装openssh-server 221024记录

    Debain各版本 bd cd dvd iso 归档下载地址 - Debian CDs/DVDs archive - http://cdimage.debian.org/cdimage/archive ...

  7. 微软虚拟网卡设置及无网络访问权限问题

    一.最近出于需要,想用电脑设置wifi供手机联网,于是百度了微软虚拟网卡(Microsoft Hosted Network Virtual Adapter)设置过程,迫不及待地在本机进行设置,以下所有 ...

  8. Android 实现无网络传输文件(2)

    在我的上一篇文章:Android 实现无网络传输文件,我介绍了通过 Wifi Direct(Wifi 直连)实现 Android 设备之间进行文件传输的方法,可以在无移动网络的情况下实现点对点的文件传 ...

  9. 计算机无网络连接,电脑无网络连接怎么办

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 电脑无网络连接,不能上网就需要调试,调试的的方法是: 1.首先把本地连接停止再启用一下看看能不能上网. 2.部分运营商送的路由器虽 ...

  10. win7 计算机名称 ip6,Win7系统提示ipv6无网络访问权限的两种原因及解决方法

    Win7系统提示ipv6无网络访问权限,导致无法上网,这该如何解决呢?ipv6无网络访问权限的原因有很多种,针对此问题,下面脚本之家的教大家解决ipv6无网络访问权限的问题,大家一起来看看吧. 故障原 ...

最新文章

  1. 深度学习 免费课程_深入学习深度学习,提供15项免费在线课程
  2. 微信小程序 - 关闭当前页面无法再通过左上角返回
  3. 台湾国立大学郭彦甫Matlab教程笔记(21)linear equations(高斯消去法和追赶法)
  4. 处理字符串_12_按照指定的位置截取字符
  5. Linux 配置静态IP
  6. SAP WebIDE UI5应用的几种启动方式
  7. 【C语言简单说】八:分支结构之if(1)
  8. React 项目开发问题积累
  9. 生产环境运行Docker的9个关键决策
  10. xmlspy2014下载安装(可用)
  11. 软件系统设计-12-软件设计体系结构概述
  12. 防止号码丢失之电话簿云端备份
  13. Lrc文件与音乐的同步显示
  14. 天涯明月刀测试-bug
  15. 被ddos攻击了怎么办,阿里云高防又太贵了
  16. python经典小程序-你用python写过那些好玩的微信小程序?
  17. c语言航标知识点,问题——阅读教学的航标
  18. android 滑动导航栏颜色渐变,Android App页面滑动标题栏颜色渐变
  19. JMeter学习笔记1-安装环境
  20. 第十二章 牛市股票还亏钱—外观模式

热门文章

  1. Onedrive创建软链接同步指定文件夹
  2. 【防火墙篇】03. Web 登录 ❀ Juniper 防火墙
  3. 写论文,这些工具让你少踩坑!
  4. c语言数字和字母运算,计算器中的字母CE、C、MR、MC、MS、M+、M-等等各是什么意思?让我来告诉你吧!...
  5. 【云驻共创】当HarmonyOS走进课堂是种什么体验
  6. 最新仿720云全景制作源码|krpano仿720云全景网站源码
  7. dlna android电视,DLNA怎么用?DLNA连接智能电视和电脑的方法分享
  8. Powerdesigner显示表的comment和列的comment的方法
  9. 2020 用html jQuery实现广告轮播图自动切换 滚动页面 鼠标悬浮下标且左右切换图片
  10. 60秒轻松计算出任意一年任意一天星期几?