Android 网络工具类NetworkUtils使用

来源:互联网 发布:学数据挖掘的去金融 编辑:程序博客网 时间:2024/05/16 15:36

 NetworkUtils工具类里封装了以下方法:

[html] view plain copy
  1. openWirelessSettings   : 打开网络设置界面  
  2. isConnected            : 判断网络是否连接  
  3. isAvailableByPing      : 判断网络是否可用  
  4. getDataEnabled         : 判断移动数据是否打开  
  5. setDataEnabled         : 打开或关闭移动数据  
  6. is4G                   : 判断网络是否是4G  
  7. getWifiEnabled         : 判断wifi是否打开  
  8. setWifiEnabled         : 打开或关闭wifi  
  9. isWifiConnected        : 判断wifi是否连接状态  
  10. isWifiAvailable        : 判断wifi数据是否可用  
  11. getNetworkOperatorName : 获取移动网络运营商名称  
  12. getNetworkType         : 获取当前网络类型  
  13. getIPAddress           : 获取IP地址  
  14. getDomainAddress       : 获取域名ip地址  

代码如下:

[java] view plain copy
  1. package com.example.myapplication;  
  2.   
  3. import android.content.Context;  
  4. import android.content.Intent;  
  5. import android.net.ConnectivityManager;  
  6. import android.net.NetworkInfo;  
  7. import android.telephony.TelephonyManager;  
  8.   
  9. import java.util.ArrayList;  
  10. import java.util.List;  
  11.   
  12. /** 
  13.  * Created by dhl on 2016/9/1. 
  14.  */  
  15. public class NetworkUtils {  
  16.   
  17.     private NetworkUtils() {  
  18.         throw new UnsupportedOperationException("u can't instance me...");  
  19.     }  
  20.   
  21.     public static final int NETWORK_WIFI = 1;    // wifi network  
  22.     public static final int NETWORK_4G = 4;    // "4G" networks  
  23.     public static final int NETWORK_3G = 3;    // "3G" networks  
  24.     public static final int NETWORK_2G = 2;    // "2G" networks  
  25.     public static final int NETWORK_UNKNOWN = 5;    // unknown network  
  26.     public static final int NETWORK_NO = -1;   // no network  
  27.   
  28.     private static final int NETWORK_TYPE_GSM = 16;  
  29.     private static final int NETWORK_TYPE_TD_SCDMA = 17;  
  30.     private static final int NETWORK_TYPE_IWLAN = 18;  
  31.   
  32.     public static List<String> typeList = new ArrayList<>();  
  33.     static  
  34.     {  
  35.         typeList.add("打开网络设置界面");  
  36.         typeList.add("获取活动网络信息");  
  37.         typeList.add("判断网络是否可用");  
  38.         typeList.add("判断网络是否是4G");  
  39.         typeList.add("判断wifi是否连接状态");  
  40.         typeList.add("获取移动网络运营商名称");  
  41.         typeList.add("获取当前的网络类型");  
  42.         typeList.add("获取当前的网络类型(WIFI,2G,3G,4G)");  
  43.   
  44.   
  45.   
  46.   
  47.   
  48.   
  49.   
  50.     }  
  51.     /** 
  52.      * 打开网络设置界面 
  53.      * <p>3.0以下打开设置界面</p> 
  54.      * 
  55.      * @param context 上下文 
  56.      */  
  57.     public static void openWirelessSettings(Context context) {  
  58.         if (android.os.Build.VERSION.SDK_INT > 10) {  
  59.             context.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS));  
  60.         } else {  
  61.             context.startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS));  
  62.         }  
  63.     }  
  64.   
  65.     /** 
  66.      * 获取活动网络信息 
  67.      * 
  68.      * @param context 上下文 
  69.      * @return NetworkInfo 
  70.      */  
  71.     public static NetworkInfo getActiveNetworkInfo(Context context) {  
  72.         ConnectivityManager cm = (ConnectivityManager) context  
  73.                 .getSystemService(Context.CONNECTIVITY_SERVICE);  
  74.         return cm.getActiveNetworkInfo();  
  75.     }  
  76.   
  77.     /** 
  78.      * 判断网络是否可用 
  79.      * <p>需添加权限 {@code <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>}</p> 
  80.      * 
  81.      * @param context 上下文 
  82.      * @return {@code true}: 可用<br>{@code false}: 不可用 
  83.      */  
  84.     public static boolean isAvailable(Context context) {  
  85.         NetworkInfo info = getActiveNetworkInfo(context);  
  86.         return info !=  && info.isAvailable();  
  87.     }  
  88.   
  89.     /** 
  90.      * 判断网络是否连接 
  91.      * <p>需添加权限 {@code <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>}</p> 
  92.      * 
  93.      * @param context 上下文 
  94.      * @return {@code true}: 是<br>{@code false}: 否 
  95.      */  
  96.     public static boolean isConnected(Context context) {  
  97.         NetworkInfo info = getActiveNetworkInfo(context);  
  98.         return info !=  && info.isConnected();  
  99.     }  
  100.   
  101.     /** 
  102.      * 判断网络是否是4G 
  103.      * <p>需添加权限 {@code <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>}</p> 
  104.      * 
  105.      * @param context 上下文 
  106.      * @return {@code true}: 是<br>{@code false}: 不是 
  107.      */  
  108.     public static boolean is4G(Context context) {  
  109.         NetworkInfo info = getActiveNetworkInfo(context);  
  110.         return info !=  && info.isAvailable() && info.getSubtype() == TelephonyManager.NETWORK_TYPE_LTE;  
  111.     }  
  112.   
  113.     /** 
  114.      * 判断wifi是否连接状态 
  115.      * <p>需添加权限 {@code <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>}</p> 
  116.      * 
  117.      * @param context 上下文 
  118.      * @return {@code true}: 连接<br>{@code false}: 未连接 
  119.      */  
  120.     public static boolean isWifiConnected(Context context) {  
  121.         ConnectivityManager cm = (ConnectivityManager) context  
  122.                 .getSystemService(Context.CONNECTIVITY_SERVICE);  
  123.         return cm !=  && cm.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI;  
  124.     }  
  125.   
  126.     /** 
  127.      * 获取移动网络运营商名称 
  128.      * <p>如中国联通、中国移动、中国电信</p> 
  129.      * 
  130.      * @param context 上下文 
  131.      * @return 移动网络运营商名称 
  132.      */  
  133.     public static String getNetworkOperatorName(Context context) {  
  134.         TelephonyManager tm = (TelephonyManager) context  
  135.                 .getSystemService(Context.TELEPHONY_SERVICE);  
  136.         return tm !=  ? tm.getNetworkOperatorName() : ;  
  137.     }  
  138.   
  139.     /** 
  140.      * 获取移动终端类型 
  141.      * 
  142.      * @param context 上下文 
  143.      * @return 手机制式 
  144.      * <ul> 
  145.      * <li>{@link TelephonyManager#PHONE_TYPE_NONE } : 0 手机制式未知</li> 
  146.      * <li>{@link TelephonyManager#PHONE_TYPE_GSM  } : 1 手机制式为GSM,移动和联通</li> 
  147.      * <li>{@link TelephonyManager#PHONE_TYPE_CDMA } : 2 手机制式为CDMA,电信</li> 
  148.      * <li>{@link TelephonyManager#PHONE_TYPE_SIP  } : 3</li> 
  149.      * </ul> 
  150.      */  
  151.     public static int getPhoneType(Context context) {  
  152.         TelephonyManager tm = (TelephonyManager) context  
  153.                 .getSystemService(Context.TELEPHONY_SERVICE);  
  154.         return tm !=  ? tm.getPhoneType() : -1;  
  155.     }  
  156.   
  157.   
  158.     /** 
  159.      * 获取当前的网络类型(WIFI,2G,3G,4G) 
  160.      * <p>需添加权限 {@code <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>}</p> 
  161.      * 
  162.      * @param context 上下文 
  163.      * @return 网络类型 
  164.      * <ul> 
  165.      * <li>{@link #NETWORK_WIFI   } = 1;</li> 
  166.      * <li>{@link #NETWORK_4G     } = 4;</li> 
  167.      * <li>{@link #NETWORK_3G     } = 3;</li> 
  168.      * <li>{@link #NETWORK_2G     } = 2;</li> 
  169.      * <li>{@link #NETWORK_UNKNOWN} = 5;</li> 
  170.      * <li>{@link #NETWORK_NO     } = -1;</li> 
  171.      * </ul> 
  172.      */  
  173.     public static int getNetWorkType(Context context) {  
  174.         int netType = NETWORK_NO;  
  175.         NetworkInfo info = getActiveNetworkInfo(context);  
  176.         if (info !=  && info.isAvailable()) {  
  177.   
  178.             if (info.getType() == ConnectivityManager.TYPE_WIFI) {  
  179.                 netType = NETWORK_WIFI;  
  180.             } else if (info.getType() == ConnectivityManager.TYPE_MOBILE) {  
  181.                 switch (info.getSubtype()) {  
  182.   
  183.                     case NETWORK_TYPE_GSM:  
  184.                     case TelephonyManager.NETWORK_TYPE_GPRS:  
  185.                     case TelephonyManager.NETWORK_TYPE_CDMA:  
  186.                     case TelephonyManager.NETWORK_TYPE_EDGE:  
  187.                     case TelephonyManager.NETWORK_TYPE_1xRTT:  
  188.                     case TelephonyManager.NETWORK_TYPE_IDEN:  
  189.                         netType = NETWORK_2G;  
  190.                         break;  
  191.   
  192.                     case NETWORK_TYPE_TD_SCDMA:  
  193.                     case TelephonyManager.NETWORK_TYPE_EVDO_A:  
  194.                     case TelephonyManager.NETWORK_TYPE_UMTS:  
  195.                     case TelephonyManager.NETWORK_TYPE_EVDO_0:  
  196.                     case TelephonyManager.NETWORK_TYPE_HSDPA:  
  197.                     case TelephonyManager.NETWORK_TYPE_HSUPA:  
  198.                     case TelephonyManager.NETWORK_TYPE_HSPA:  
  199.                     case TelephonyManager.NETWORK_TYPE_EVDO_B:  
  200.                     case TelephonyManager.NETWORK_TYPE_EHRPD:  
  201.                     case TelephonyManager.NETWORK_TYPE_HSPAP:  
  202.                         netType = NETWORK_3G;  
  203.                         break;  
  204.   
  205.                     case NETWORK_TYPE_IWLAN:  
  206.                     case TelephonyManager.NETWORK_TYPE_LTE:  
  207.                         netType = NETWORK_4G;  
  208.                         break;  
  209.                     default:  
  210.   
  211.                         String subtypeName = info.getSubtypeName();  
  212.                         if (subtypeName.equalsIgnoreCase("TD-SCDMA")  
  213.                                 || subtypeName.equalsIgnoreCase("WCDMA")  
  214.                                 || subtypeName.equalsIgnoreCase("CDMA2000")) {  
  215.                             netType = NETWORK_3G;  
  216.                         } else {  
  217.                             netType = NETWORK_UNKNOWN;  
  218.                         }  
  219.                         break;  
  220.                 }  
  221.             } else {  
  222.                 netType = NETWORK_UNKNOWN;  
  223.             }  
  224.         }  
  225.         return netType;  
  226.     }  
  227.   
  228.     /** 
  229.      * 获取当前的网络类型(WIFI,2G,3G,4G) 
  230.      * <p>依赖上面的方法</p> 
  231.      * 
  232.      * @param context 上下文 
  233.      * @return 网络类型名称 
  234.      * <ul> 
  235.      * <li>NETWORK_WIFI   </li> 
  236.      * <li>NETWORK_4G     </li> 
  237.      * <li>NETWORK_3G     </li> 
  238.      * <li>NETWORK_2G     </li> 
  239.      * <li>NETWORK_UNKNOWN</li> 
  240.      * <li>NETWORK_NO     </li> 
  241.      * </ul> 
  242.      */  
  243.     public static String getNetWorkTypeName(Context context) {  
  244.         switch (getNetWorkType(context)) {  
  245.             case NETWORK_WIFI:  
  246.                 return "NETWORK_WIFI";  
  247.             case NETWORK_4G:  
  248.                 return "NETWORK_4G";  
  249.             case NETWORK_3G:  
  250.                 return "NETWORK_3G";  
  251.             case NETWORK_2G:  
  252.                 return "NETWORK_2G";  
  253.             case NETWORK_NO:  
  254.                 return "NETWORK_NO";  
  255.             default:  
  256.                 return "NETWORK_UNKNOWN";  
  257.         }  
  258.     }  
  259. }  

功能就这么多,下面是我的MainActivity的代码:

[java] view plain copy
  1. package com.example.myapplication;  
  2.   
  3. import android.net.NetworkInfo;  
  4. import android.support.v7.app.AppCompatActivity;  
  5. import android.os.Bundle;  
  6. import android.view.View;  
  7. import android.widget.AdapterView;  
  8. import android.widget.Button;  
  9. import android.widget.ListView;  
  10. import android.widget.Switch;  
  11. import android.widget.Toast;  
  12.   
  13. import java.util.ArrayList;  
  14. import java.util.List;  
  15.   
  16. /** 
  17.  * 网络相关操作 
  18.  */  
  19. public class MainActivity extends AppCompatActivity {  
  20.   
  21.   
  22.   
  23.     private ListView listView;  
  24.   
  25.     @Override  
  26.     protected void onCreate(Bundle savedInstanceState) {  
  27.         super.onCreate(savedInstanceState);  
  28.         setContentView(R.layout.activity_main);  
  29.         listView = (ListView)findViewById(R.id.lsit);  
  30.         listView.setAdapter(new CommonAdapter<String>(MainActivity.this,NetworkUtils.typeList,R.layout.list_item) {  
  31.             @Override  
  32.             public void convert(ViewHolder helper, String item) {  
  33.   
  34.                 Button button = helper.getView(R.id.network_button);  
  35.                 button.setText(item);  
  36.             }  
  37.         });  
  38.   
  39.         listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {  
  40.             @Override  
  41.             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {  
  42.   
  43.                 switch(NetworkUtils.typeList.get(position))  
  44.                 {  
  45.                     case  "打开网络设置界面":  
  46.                         NetworkUtils.openWirelessSettings(MainActivity.this);  
  47.                     break;  
  48.                     case "获取活动网络信息" :  
  49.                         NetworkInfo networkInfo =  NetworkUtils.getActiveNetworkInfo(MainActivity.this);  
  50.                         Toast.makeText(MainActivity.this, networkInfo.toString(), Toast.LENGTH_SHORT).show();  
  51.                         break;  
  52.                     case "判断网络是否可用" :  
  53.                         boolean isAvailable =  NetworkUtils.isAvailable(MainActivity.this);  
  54.                         Toast.makeText(MainActivity.this,isAvailable+"" , Toast.LENGTH_SHORT).show();  
  55.                         break;  
  56.                     case "判断网络是否连接" :  
  57.                         boolean isConnected =  NetworkUtils.isConnected(MainActivity.this);  
  58.                         Toast.makeText(MainActivity.this,isConnected+"" , Toast.LENGTH_SHORT).show();  
  59.                         break;  
  60.                     case "判断网络是否是4G" :  
  61.                         boolean is4G = NetworkUtils.is4G(MainActivity.this);  
  62.                         Toast.makeText(MainActivity.this,is4G+"" , Toast.LENGTH_SHORT).show();  
  63.                         break;  
  64.                     case "判断wifi是否连接状态" :  
  65.                         boolean isWifiConnected = NetworkUtils.isWifiConnected(MainActivity.this);  
  66.                         Toast.makeText(MainActivity.this,isWifiConnected+"" , Toast.LENGTH_SHORT).show();  
  67.                         break;  
  68.                     case "获取移动网络运营商名称" :  
  69.                         String getNetworkOperatorName = NetworkUtils.getNetworkOperatorName(MainActivity.this);  
  70.                         Toast.makeText(MainActivity.this,getNetworkOperatorName+"" , Toast.LENGTH_SHORT).show();  
  71.                         break;  
  72.                     case "获取移动终端类型" :  
  73.                         int getPhoneType = NetworkUtils.getPhoneType(MainActivity.this);  
  74.                         Toast.makeText(MainActivity.this,getPhoneType+"" , Toast.LENGTH_SHORT).show();  
  75.                         break;  
  76.                     case "获取当前的网络类型" :  
  77.                         int getNetWorkType = NetworkUtils.getNetWorkType(MainActivity.this);  
  78.                         Toast.makeText(MainActivity.this,getNetWorkType+"" , Toast.LENGTH_SHORT).show();  
  79.                         break;  
  80.                     case "获取当前的网络类型(WIFI,2G,3G,4G)" :  
  81.                         String getNetWorkTypeName = NetworkUtils.getNetWorkTypeName(MainActivity.this);  
  82.                         Toast.makeText(MainActivity.this,getNetWorkTypeName+"" , Toast.LENGTH_SHORT).show();  
  83.                         break;  
  84.   
  85.                 }  
  86.             }  
  87.         });  
  88.     }  
  89.   
  90.   
  91.     private void showToast()  
  92.     {  
  93.   
  94.     }  
  95. }  

两个布局文件:activity_main:

[html] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     xmlns:tools="http://schemas.android.com/tools"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent"  
  6.     android:paddingBottom="@dimen/activity_vertical_margin"  
  7.     android:paddingLeft="@dimen/activity_horizontal_margin"  
  8.     android:paddingRight="@dimen/activity_horizontal_margin"  
  9.     android:paddingTop="@dimen/activity_vertical_margin"  
  10.     tools:context="com.example.myapplication.MainActivity">  
  11.   
  12.     <ListView  
  13.         android:id="@+id/lsit"  
  14.         android:layout_width="match_parent"  
  15.         android:layout_height="match_parent"  
  16.   
  17.        />  
  18. </RelativeLayout>  

item:

[html] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     xmlns:tools="http://schemas.android.com/tools"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="wrap_content"  
  6.     android:descendantFocusability="blocksDescendants"  
  7.     >  
  8.   
  9.     <Button  
  10.         android:id="@+id/network_button"  
  11.         android:layout_width="wrap_content"  
  12.         android:layout_height="wrap_content"  
  13.   
  14.         />  
  15. </RelativeLayout>  

以及这里用到了鸿洋的通用adapter :

[java] view plain copy
  1. package com.example.myapplication;  
  2.   
  3. import android.content.Context;  
  4. import android.view.LayoutInflater;  
  5. import android.view.View;  
  6. import android.view.ViewGroup;  
  7. import android.widget.BaseAdapter;  
  8.   
  9. import java.util.List;  
  10.   
  11. /** 
  12.  * Created by dhl on 2016/7/11. 
  13.  */  
  14. public abstract  class CommonAdapter<T> extends BaseAdapter{  
  15.   
  16.     protected LayoutInflater mInflater ;  
  17.     protected Context mContext ;  
  18.     protected List<T> mDatas ;  
  19.     protected final int mItemLayoutId;  
  20.   
  21.     public CommonAdapter(Context context, List<T> mDatas, int mItemLayoutId)  
  22.     {  
  23.         mInflater = LayoutInflater.from(context);  
  24.         this.mContext = context ;  
  25.         this.mDatas = mDatas;  
  26.         this.mItemLayoutId = mItemLayoutId ;  
  27.     }  
  28.   
  29.     @Override  
  30.     public int getCount() {  
  31.         return mDatas.size();  
  32.     }  
  33.   
  34.     @Override  
  35.     public Object getItem(int position) {  
  36.         return mDatas.get(position);  
  37.     }  
  38.   
  39.     @Override  
  40.     public long getItemId(int position) {  
  41.         return position;  
  42.     }  
  43.   
  44.     @Override  
  45.     public int getViewTypeCount() {  
  46.         return 2;  
  47.     }  
  48.   
  49.     @Override  
  50.     public int getItemViewType(int position) {  
  51.        return position%2 ;  
  52.     }  
  53.   
  54.     public int getItemLayoutIdByItemViewType(int type)  
  55.     {  
  56.         return 0;  
  57.     }  
  58.   
  59.     @Override  
  60.     public View getView(int position, View convertView, ViewGroup parent) {  
  61.         final ViewHolder viewHolder = getViewHolder(position ,convertView,parent);  
  62.         convert(viewHolder,mDatas.get(position));  
  63.         return viewHolder.getmConvertView();  
  64.     }  
  65.   
  66.     public abstract  void convert(ViewHolder helper ,T item);  
  67.     private ViewHolder getViewHolder(int position,View convertView ,ViewGroup parent)  
  68.     {  
  69.         if(mItemLayoutId != 0)  
  70.         {  
  71.             return ViewHolder.get(mContext,convertView,parent,mItemLayoutId,position);  
  72.         }else {  
  73.             return ViewHolder.get(mContext, convertView, parent,  getItemLayoutIdByItemViewType(getItemViewType(position)),position);  
  74.         }  
  75.     }  
  76.   
  77. }  
ViewHolder:
[java] view plain copy
  1. package com.example.myapplication;  
  2.   
  3. import android.content.Context;  
  4. import android.util.SparseArray;  
  5. import android.view.LayoutInflater;  
  6. import android.view.View;  
  7. import android.view.ViewGroup;  
  8.   
  9. /** 
  10.  * Created by dhl on 2016/7/11. 
  11.  */  
  12. public class ViewHolder {  
  13.   
  14.     private final SparseArray<View> mViews ;  
  15.     private View mConvertView ;  
  16.     private int mPosition;  
  17.     private ViewHolder(Context context, ViewGroup parent , int layoutId, int position)  
  18.     {  
  19.         this.mViews = new SparseArray<View>();  
  20.         mConvertView = LayoutInflater.from(context).inflate(layoutId,parent,false);  
  21.         mPosition = position ;  
  22.         mConvertView.setTag(this);  
  23.     }  
  24.   
  25.     public static ViewHolder get(Context context ,View convertView,ViewGroup parent,  
  26.                                  int layoutId ,int position)  
  27.     {  
  28.         ViewHolder holder =  ;  
  29.         if(convertView == )  
  30.         {  
  31.             holder =  new ViewHolder(context,parent,layoutId,position);  
  32.         }else {  
  33.   
  34.             holder = (ViewHolder) convertView.getTag();  
  35.             holder.mPosition = position;  
  36.         }  
  37.   
  38.         return holder;  
  39.     }  
  40.   
  41.     public <T extends View> T getView(int viewId)  
  42.     {  
  43.         View view = mViews.get(viewId);  
  44.         if(view == )  
  45.         {  
  46.             view = mConvertView.findViewById(viewId);  
  47.             mViews.put(viewId,view);  
  48.   
  49.         }  
  50.         return (T)view ;  
  51.     }  
  52.   
  53.     public View getmConvertView()  
  54.     {  
  55.         return  mConvertView;  
  56.     }  
  57.   
  58.     public int getPosition()  
  59.     {  
  60.         return mPosition ;  
  61.     }  
  62.   
  63. }  

以及最后要添加的权限:

[html] view plain copy
  1. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
原创粉丝点击