Android获取网络状态
Android获取网络状态
学习自
- https://developer.android.google.cn/reference/android/net/ConnectivityManager
- http://www.cnblogs.com/qingblog/archive/2012/07/19/2598983.html
Overview
在做Android app的时候,网络的状态可能会经常的变化,当用户当前没有网络的时候,我们要保证程序不崩溃,而在当用户使用流量的话,则需要确保,在进行耗流量的操作的时候,需要给予用户警告(比如看视频,播放音乐,下载等).
想要获取网络状态的话,我们需要通过 ConnectivityManager 类来实现,该类负责与 NetworkManagementService 系统服务进行交互来获取网络相关的信息。我们先来看一下官方文档是如何描述这个类的:
Class that answers queries about the state of network connectivity. It also notifies applications when network connectivity changes.
该类负责回答关于网络连接的状态的问题。 当网络连接发生改变的时候也会通知应用。
The primary responsibilities of this class are to:
该类的主要责任是:
- Monitor network connections (Wi-Fi, GPRS, UMTS, etc.)
- 监听网络连接(Wifi,GPRS,UMTS等)
- Send broadcast intents when network connectivity changes
- 当网络状态发生改变的时候,发送广播
- Attempt to "fail over" to another network when connectivity to a network is lost
- 当网络连接丢失后,尝试连接到另一个网络
- Provide an API that allows applications to query the coarse-grained or fine-grained state of the available networks
- 提供一个API来允许应用查询粗粒度或细粒度的可用网络的状态
- Provide an API that allows applications to request and select networks for their data traffic
- 提供一个API允许应用为他们的数据流量请求或者选择网络
可以通过下面的方式获取此类的实例
val connectivityManager: ConnectivityManager =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val connectivityManager: ConnectivityManager =
context.getSystemService(ConnectivityManager::class.java) as ConnectivityManager
小贴士,请不要忘记添加
android.permission.ACCESS_NETWORK_STATE权限。
NetworkInfo
NetworkInfo 是一个描述网络连接状态的接口,我们主要通过这个类来获取网络的状态。
val connectivityManager: ConnectivityManager =
context.getSystemService(ConnectivityManager::class.java) as ConnectivityManager
val networkInfo = connectivityManager.activeNetworkInfo
常用的功能
判断网络是否连接
/**
* 判断网络是否可用
* */
fun isAvailable(context: Context): Boolean {
val connectivityManager: ConnectivityManager =
context.getSystemService(ConnectivityManager::class.java) as ConnectivityManager
val networkInfo = connectivityManager.activeNetworkInfo
if (networkInfo != null) {
return networkInfo.isAvailable
}
return false
}
判断是否是移动数据
fun isMobile(context: Context): Boolean {
val connectivityManager: ConnectivityManager =
context.getSystemService(ConnectivityManager::class.java) as ConnectivityManager
val networkInfo = connectivityManager.activeNetworkInfo
if (networkInfo != null) {
return networkInfo.type == ConnectivityManager.TYPE_MOBILE
}
return false
}
监听网络的变化
从官方文档我们可以知道,如果要想监听到网络的变化的,那么需要我们动态注册一个广播才行。
val networkStatusChangeReceiver = object : BroadcastReceiver() {
@SuppressLint("ServiceCast")
override fun onReceive(context: Context?, intent: Intent?) {
val connectivityManager: ConnectivityManager =
context!!.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkInfo = connectivityManager.activeNetworkInfo
if (networkInfo != null && networkInfo.isAvailable) {
tvNetworkStatus.text = "Current Network Status: Available"
} else {
tvNetworkStatus.text = "Current Network Status: unavailable"
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//注册一个广播
val filter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)
this.registerReceiver(this.networkStatusChangeReceiver, filter)
}
override fun onDestroy() {
this.unregisterReceiver(this.networkStatusChangeReceiver)
super.onDestroy()
}
Android获取网络状态的更多相关文章
- Android 获取网络状态
1.检测网络是否可用 public boolean isNetWorkConnected() { ConnectivityManager cm = (ConnectivityManager)getSy ...
- Delphi XE5 android 获取网络状态
unit Androidapi.JNI.Network; interface function IsConnected: Boolean; function IsWiFiConnected: Bool ...
- Delphi XE5 android 获取网络状态《转》
unit Androidapi.JNI.Network; interface function IsConnected: Boolean; function IsWiFiConnected: Bool ...
- android开发获取网络状态,wifi,wap,2g,3g.工具类(一)
android开发获取网络状态整理: package com.gzcivil.utils; import android.content.Context; import android.net.Con ...
- Android 监控网络状态
public static boolean isNetworkAvailable(Context context) { ConnectivityManager connectivity = (Conn ...
- React Native之Fetch简单封装、获取网络状态
1.Fetch的使用 fetch的使用非常简单,只需传入请求的url fetch('https://facebook.github.io/react-native/movies.json'); 当然是 ...
- [React Native]获取网络状态
使用React Native,可以使用NetInfo API获取手机当前的各个网络状态. componentWillMount() { NetInfo.fetch().done((status)=&g ...
- iOS 获取网络状态
在iOS开发者,获取网络状态比较常用 -(NSString *)getNetWorkStates{ UIApplication *app = [UIApplication sharedApplicat ...
- 微信小程序 --- 获取网络状态
获取网络状态:wx.getNetworkType btnclick:function(){ wx.getNetworkType({ success:function(res){ console.log ...
随机推荐
- Vue.js——理解与创建使用
Vue.js 概念:是一个轻巧.高性能.可组件化的MVVM库,同时拥有非常容易上手的API,作者是尤雨溪是中国人. 优点: 1)易用 已经会了HTML,CSS,JavaScript?即刻阅读指南开始构 ...
- Java快速学习笔记01
这一波快速学习主要是应付校招笔面试用,功利性质不可避免. 学习网址: http://www.runoob.com/java/java-tutorial.html 执行命令解析: 以上我们使用了两个命令 ...
- svn数据库自动备份脚本
创建一个存放备份数据的路径 mkdir /data/svnbak -p 采用shell脚本的方式实现自动备份 #vim backup.sh #!/bin/bash log="/data/sv ...
- Linux常用命令2(远程文件下载+查看文件内容)
一.远程文件下载的两种方法:ftp命令 + scp命令 ftp命令: 服务器若安装了ftp Server,另外一台Linux可以使用ftp的client程序来进行文件的远程拷贝读取下载和写入上载. 1 ...
- 取消Eclipse控制台显示行数的限制
--------------------------------------------------------------------------------------------------- ...
- 如何优雅打印nginx header和body
场景 参考https://segmentfault.com/a/1190000000606867可以获取response的报文体,由于业务测试有获取响应头Header或响应体Body的需求,这里是通过 ...
- OCM_第十九天课程:Section9 —》Data Guard _ DATA GUARD 原理/DATA GUARD 应用/DATA GUARD 搭建
注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...
- opencv error: insufficient memory错误解决办法
用opencv合成图像时出现的错误,大概4000多张会报错,在网上查阅一些博客时才知道原因.之前编译的时候用的是x86,切换到x64下可解决问题,具体: 1.项目->属性->配置管理器-& ...
- MySQL 由 5.7 升级为 8.0 之后,Laravel 的配置改动
开发机上升级了 MySQL 8.0, 原有的 Laravel 5.5 项目就启动失败了. 报错信息是: [2018-05-30 11:17:37] local.ERROR: SQLSTATE[4200 ...
- PHP 获取时间
1.获取系统当前时间 echo "date('Y-m-d',time())"; 2.获取系统前一天时间 echo "date("Y-m-d",strt ...