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 ...
随机推荐
- SpringBoot整合日志
Java日志 日志的接口层.抽象层 日志的实现 JCL(Jakarta Commons Logging) SLF4J(Simple Logging Facade for Java) Jboss-Log ...
- python中argparse模块用法实例详解
python中argparse模块用法实例详解 这篇文章主要介绍了python中argparse模块用法,以实例形式较为详细的分析了argparse模块解析命令行参数的使用技巧,需要的朋友可以参考下 ...
- 提高CPU使用率100%
直接上脚本: #!/bin/bash while true do echo 2^2^20 | bc & >/dev/null done 查看CPU使用率用top命令即可 释放CPU: p ...
- Vue.js——component(组件)
概念: 组件(Component)是自定义元素. 作用: 可以扩展HTML元素,封装可重用的代码. <div id="myView"> <!-- 把学生的数据循环 ...
- linux命令 dirname
功能: 获取给定路径的目录部分 利用man 查看dirname的说明如下: DESCRIPTION Output each NAME with its last non-slash co ...
- 解决服务器代码执行mvn test后在classes和test-classes下找不到Spring的bean.xml配置文件问题
昨天在jenkins构建代码后,执行mvn test 就报错如下: 提示的bean.xm不存在呀, 再来看源码ApplicationContext 的声明 ApplicationContext ctx ...
- Java EE 8 来了
作者 李士窑 发布于 2014年9月2日. 估计阅读时间: 不到一分钟 | 自2013年6月Java EE 7发布以来,Java开发团队在这段时间内一直在规划和搜集下一个大版本Java EE 8带 ...
- 用PNChart绘制饼状图简介
写在前面 最近做的小Demo中有一个绘制饼状图的需求.在开始实现之前上网了解了一下现有的一些绘制图形的第三方库,相应的库还是有挺多的,PNChart便是其中一个.PNChart是一个90后的中国boy ...
- python接口自动化测试十:字典、字符串、json之间的简单处理
# 字典 t = { # 键:值 '': '', '': '' } # 字典 # dict key: value key是唯一的,无序的 h = { ...
- 集合Arraylist的方法的使用和打印
package chapter090; import java.util.ArrayList;import java.util.List; public class TestList01 { publ ...