转 Android杂谈--网络状态判断

简介: http://www.cnblogs.com/loulijun/archive/2012/02/03/2337230.html 原文地址 许多联网应用都在开始运行的时候检查当前网络状态,如果没有开启则去开启它,记录一下以前写程序时的网络检查,发现人的记忆力真是有限,总是隔段时间久忘记,所以记录下来是最好的记忆。

http://www.cnblogs.com/loulijun/archive/2012/02/03/2337230.html 原文地址

许多联网应用都在开始运行的时候检查当前网络状态,如果没有开启则去开启它,记录一下以前写程序时的网络检查,发现人的记忆力真是有限,总是隔段时间久忘记,所以记录下来是最好的记忆。

  我们可以在一开始启动程序的时候检查网络连接状况,如果没有开启则弹出对话框设置网络

  首先需要加入权限

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

 

检查网络状态代码如下

public boolean CheckNetworkState()
    {
        boolean flag = false;
        ConnectivityManager manager = (ConnectivityManager)getSystemService(
                Context.CONNECTIVITY_SERVICE);
        if(manager.getActiveNetworkInfo() != null)
        {
            flag = manager.getActiveNetworkInfo().isAvailable();
        }
        if(!flag)
        {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setIcon(android.R.drawable.ic_dialog_alert);
            builder.setTitle(R.string.netstate);
            builder.setMessage(R.string.setnetwork);
            builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // TODO Auto-generated method stub
                    Intent mIntent = new Intent("/");
                    ComponentName comp = new ComponentName("com.android.settings",
                            "com.android.settings.WirelessSettings");
                    mIntent.setComponent(comp);
                    mIntent.setAction("android.intent.action.VIEW");
                    startActivity(mIntent);
                }
            });
            builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });
            builder.create();
            builder.show();
        }
        
        return flag;
        
    }

效果如下,用户可以点击确定来设置网络,比如启动wifi

如果希望网络连接时做一些事情的话,需要判断当前网络状态是否为true,为真则进行一些操作,否则设置网络。还可以用另外一种方式,其实差不多

 

//setnetwork
    public void setNetwork()
    {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setIcon(android.R.drawable.ic_dialog_alert);
        builder.setTitle(R.string.netstate);
        builder.setMessage(R.string.setnetwork);
        builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
            
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                Intent mIntent = new Intent("/");
                ComponentName comp = new ComponentName("com.android.settings",
                        "com.android.settings.WirelessSettings");
                mIntent.setComponent(comp);
                mIntent.setAction("android.intent.action.VIEW");
                startActivity(mIntent);
            }
        });
        builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
            
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });
        builder.create();
        builder.show();
    }
    
    //NETWORK
    public boolean isNetworkAvailable()
    {
        Context context = getApplicationContext();
        ConnectivityManager connect = (ConnectivityManager)context.getSystemService(
                Context.CONNECTIVITY_SERVICE);
        if(connect==null)
        {
            return false;
        }else//get all network info
        {
            NetworkInfo[] info = connect.getAllNetworkInfo();
            if(info!=null)
            {
                for(int i=0;i<info.length;i++)
                {
                    if(info[i].getState()==NetworkInfo.State.CONNECTED)
                    {
                        return true;
                    }
                }
            }
        }
        return false;
    }

然后通过判断如果当前状态可用则执行相关代码,不可用则设置网络

if(isNetworkAvailable())
{
相关代码
}else
{
setNetwork();
}

 

可以通过ConnectivityManager获取当前网络连接状态,通过状态值判别当前网络连接

NetworkInfo info = conMan.getActiveNetworkInfo();


      if(info !=null && info.getType() ==  ConnectivityManager.TYPE_MOBILE)
      {

       // NETWORK_TYPE_EVDO_A是电信3G

      //NETWORK_TYPE_EVDO_A是中国电信3G的getNetworkType

      //NETWORK_TYPE_CDMA电信2G是CDMA

      //移动2G卡 + CMCC + 2//type = NETWORK_TYPE_EDGE

      //联通的2G经过测试 China Unicom   1 NETWORK_TYPE_GPRS


       if(info.getSubtype() == TelephonyManager.NETWORK_TYPE_GPRS

           || info.getSubtype() == TelephonyManager.NETWORK_TYPE_CDMA
           || info.getSubtype() == TelephonyManager.NETWORK_TYPE_EDGE){
          System.out.println("mobile connected");
       }
       else{
            System.out.println("type:"+info.getSubtype());
             System.out.println("not mobile");
       }
      }else
      System.out.println("not mobile connected");

 


通过getType的值可以得到以下2g|3g网络

networktype 1~15分别为:联通2G,移动2G,电信2G,电信3G,电信3G,电信3G,联通3G,联通3G,LTE,IDEN,HSUPA,HSPA,HSPAP 

 

 

 

 

 

目录
相关文章
|
安全 Java Android开发
【Android 逆向】APK 加壳脱壳现状 | 判断 APK 是否加壳 | APK 逆向流程
【Android 逆向】APK 加壳脱壳现状 | 判断 APK 是否加壳 | APK 逆向流程
1284 0
|
存储 XML 设计模式
一个简单的Android网络访问全局码判断及通用数据解析方案
我们在开发中,网络请求经常会遇到各种错误码的判断。比如下面这样:
145 0
|
Android开发
Android WIFI是否连接,网络状态监测工具类
Android WIFI是否连接,网络状态监测工具类
312 0
|
Android开发
Android日期选择器,年月日判断处理。
Android日期选择器,年月日判断处理。
320 0
Android日期选择器,年月日判断处理。
|
安全 5G Android开发
关于Android获取网络状态
在开发过程中,有时候需要考虑到网络状态,然后弹出一个提示框,特别是在弱网的情况下,为了更好的用户体验,一般都是需要一个提示页面的。 这里面关于网络的判断,包含网络是否可用,超时状态,2G网络、3G网络、是否是wifi状态等。 有时候我们请求一个接口,在网络不稳定,弱网的情况下,就很容易出现请求超时的情况,当然这个超时时间是我们设定的,一般都是30秒,算差不多了。
209 0
|
JSON Android开发 图形学
修行Android Studio技巧到出神入化,快速涨薪-【预览列表】、【Null判断】篇
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
174 0
|
传感器 安全 开发工具
Android识别模拟器,判断是模拟器还是真机
Android识别模拟器,判断是模拟器还是真机
2033 0
|
XML Java Android开发
如何判断当前屏幕TextView是否会自动换行_Android提高篇(Java)
如何判断当前屏幕TextView是否会自动换行_Android提高篇(Java)
469 0
|
缓存 Android开发
【Android 电量优化】电量优化 ( 网络状态获取 | 主动获取 WIFI 状态 | 被动获取 WIFI 状态 )
【Android 电量优化】电量优化 ( 网络状态获取 | 主动获取 WIFI 状态 | 被动获取 WIFI 状态 )
144 0
|
Android开发 数据库管理
android sqlite 判断表和表中字段是否存在方法
android sqlite 判断表和表中字段是否存在方法