Android中判断应用运行时是否有网络连接并弹出对话框提示

来源:互联网 发布:unity3d室内场景收费 编辑:程序博客网 时间:2024/06/01 07:19

编写不易,如有转载,请声明出处: 梦回河口:http://blog.csdn.net/zxc514257857/article/details/59175179

  • 判断应用是否有网络的工具类,如果没网络弹出对话框,需手动开启网络
public class NetworkUtils {    /*** 判断网络情况   有网络返回true,没网络返回false*/    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);    }}
  • 在Activity中显式的注册和取消注册广播,在onResume()方法中注册,在onPause()方法中取消注册
private NetWorkStateReceiver mNetWorkStateReceiver;@Overrideprotected void onResume() {        if (mNetWorkStateReceiver== null) {            mNetWorkStateReceiver= new NetWorkStateReceiver();        }        IntentFilter filter = new IntentFilter();        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);        registerReceiver(mNetWorkStateReceiver, filter);        super.onResume();}@Overrideprotected void onPause() {        unregisterReceiver(mNetWorkStateReceiver);        super.onPause();}
  • 在AndroidManifest文件中添加网络访问和网络状态权限
<uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

Demo下载请移步:http://download.csdn.net/detail/zxc514257857/9826872


———-因本人才疏学浅,如博客或Demo中有错误的地方请大家随意指出,与大家一起讨论,共同进步,谢谢!———-

1 0
原创粉丝点击