博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Android】详解Android 网络操作
阅读量:4698 次
发布时间:2019-06-09

本文共 4418 字,大约阅读时间需要 14 分钟。

目录结构:

contents structure
[+]

获取网络信息需要在AndroidManifest.xml文件中加入相应的权限。

1.判断网络

1.1 判断是否有网络连接

public boolean isNetworkConnected(Context context) {if (context != null) {ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();if (mNetworkInfo != null) {return mNetworkInfo.isAvailable();}}return false;}

1.2判断WIFI网络是否可用

public boolean isWifiConnected(Context context) {if (context != null) {ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo mWiFiNetworkInfo = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);if (mWiFiNetworkInfo != null) {return mWiFiNetworkInfo.isAvailable();}}return false;}

这里需要注意,该方法只是判断当前环境下是否有可用的WIFI,并不是判断是否已经连接上WIFI。

1.3 判断MOBILE网络是否可用

public boolean isMobileConnected(Context context) {if (context != null) {ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo mMobileNetworkInfo = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);if (mMobileNetworkInfo != null) {return mMobileNetworkInfo.isAvailable();}}return false;}

1.4 获取当前网络连接的类型信息

public static int getConnectedType(Context context) {if (context != null) {ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();if (mNetworkInfo != null && mNetworkInfo.isAvailable()) {return mNetworkInfo.getType();}}return -1;}

getType()的返回值可以是ConnectivityManager中的TYPE_MOBILE、TYPE_WIFI、TYPE_WIMAX、TYPE_ETHERNET、TYPE_BLUETOOTH、其他类型。

1.5 准确判断网络是否可用

有时候我们连接上一个没有外网连接的WiFi或者有线就会出现这种极端的情况,目前Android SDK还不能识别这种情况,一般的解决办法就是ping一个外网。

在使用下面这个方法之前应该加上如下的权限:

/* @author suncat * @category 判断是否有外网连接(普通方法不能判断外网的网络是否连接,比如连接上局域网) * @return */public static final boolean ping() {String result = null;try {    String ip = "www.baidu.com";// ping 的地址,可以换成任何一种可靠的外网    Process p = Runtime.getRuntime().exec("ping -c 3 -w 100 " + ip);// ping网址3次     // 读取ping的内容,可以不加     InputStream input = p.getInputStream();     BufferedReader in = new BufferedReader(new InputStreamReader(input));     StringBuffer stringBuffer = new StringBuffer();    String content = "";    while ((content = in.readLine()) != null) {       stringBuffer.append(content);     }       Log.d("------ping-----", "result content : " + stringBuffer.toString());       // ping的状态       int status = p.waitFor();      if (status == 0) {          result = "success";          return true;      } else {          result = "failed";      }   } catch (IOException e) {       result = "IOException";   } catch (InterruptedException e) {       result = "InterruptedException";  } finally {      Log.d("----result---", "result = " + result);   }  return false;}

2.监听网络

 定义广播接受者:

BroadcastReceiver connectionReceiver = new BroadcastReceiver() {        @Override        public void onReceive(Context context, Intent intent) {            ConnectivityManager mConnectivityManager = (ConnectivityManager) context                    .getSystemService(Context.CONNECTIVITY_SERVICE);            NetworkInfo mNetworkInfo = mConnectivityManager                    .getActiveNetworkInfo();            int type = -1;            if (mNetworkInfo != null && mNetworkInfo.isAvailable()) {                type = mNetworkInfo.getType();            }            if (type == ConnectivityManager.TYPE_WIFI) {                Toast.makeText(MainActivity.this, "wifi", Toast.LENGTH_SHORT)                        .show();            } else if (type == ConnectivityManager.TYPE_MOBILE) {                Toast.makeText(MainActivity.this, "网络可用", Toast.LENGTH_SHORT)                .show();            }else if(type==-1){                Toast.makeText(MainActivity.this, "网络不可用", Toast.LENGTH_SHORT)                .show();            }else{                Toast.makeText(MainActivity.this, "未知网络", Toast.LENGTH_SHORT)                .show();            }        }    };

在合适的位置注册:

IntentFilter intentFilter = new IntentFilter();        intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);        registerReceiver(connectionReceiver, intentFilter);

在合适的位置取消注册:

unregisterReceiver(connectionReceiver);

 

转载于:https://www.cnblogs.com/HDK2016/p/8978154.html

你可能感兴趣的文章
PHP 自动加载类 __autoload() 方法
查看>>
JDK中的Timer和TimerTask详解(zhuan)
查看>>
【python练习】ATM&购物商城程序
查看>>
nginx 日志问题(\x22)
查看>>
装饰器、迭代器、生成器
查看>>
类对象作为类成员
查看>>
面向对象和面向过程的区别及优劣对比详解
查看>>
const与指针
查看>>
thsi指针的一些用法及作用
查看>>
c++友元
查看>>
c++运算符重载
查看>>
一元运算符重载
查看>>
Windows 远程栈溢出挖掘
查看>>
(网页)the server responded with a status of 403 (Forbidden)
查看>>
葡萄城报表介绍:Java 报表
查看>>
android 通知消息一
查看>>
UNET学习笔记2 - 高级API(HLAPI)
查看>>
腾讯编程马拉松2012第一题
查看>>
Day18
查看>>
Web Service数据源
查看>>