转载 https://www.jianshu.com/p/66afbd05c9b9
以前监听网络变化都是使用的广播,现在换一种方式 ConnectivityManager.NetworkCallback
可以监听到 蜂窝网络,wifi,USB外接网卡网络变化,没有过多测试,我主要测试的 USB 网卡网络变化,应该各种网络变化都可以监听到。
1、写一个监听类
package com.tky.phm.net;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.util.Log;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public class NetworkCallbackImplextends ConnectivityManager.NetworkCallback {
private StringTAG ="NetworkCallbackImpl";
@Override
public void onAvailable(Network network) {
super.onAvailable(network);
Log.d(TAG, "onAvailable: 网络已连接");
}
@Override
public void onLost(Network network) {
super.onLost(network);
Log.e(TAG, "onLost: 网络已断开");
}
@Override
public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) {
super.onCapabilitiesChanged(network, networkCapabilities);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
if (networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) {
if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
Log.d(TAG, "onCapabilitiesChanged: 网络类型为wifi");
}else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
Log.d(TAG, "onCapabilitiesChanged: 蜂窝网络");
}else {
Log.d(TAG, "onCapabilitiesChanged: 其他网络");
}
}
}
}
}
2、注册监听类
try {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
NetworkCallbackImpl networkCallback =new NetworkCallbackImpl();
NetworkRequest.Builder builder =null;
builder =new NetworkRequest.Builder();
NetworkRequest request = builder.build();
ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (connMgr !=null) {
connMgr.registerNetworkCallback(request, networkCallback);
}
}
}catch (Exception e) {
e.printStackTrace();
}
3、添加网络权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
4、结束
文章浏览阅读995次。原文_unity100题
文章浏览阅读1k次,点赞29次,收藏11次。【校园二手交易平台】(微信小程序)安装vscode使用vscode打开后台系统项目在终端运行即可运行项目src/assets中存放静态资源src/components中存放组件app.vue是主界面(入口页面)注释main.ts中的package.json中是项目依赖的版本号注意安装插件README.md是项目启动的方式。
文章浏览阅读48次。我一直觉得敏捷是理想与现实妥协的结果,是一种很好的实践,理论网上随便一搜就有很多,这次就说说我身边的团队,真实的实践,通过“沟通”的角度来讲,不妨起个名字叫做“敏捷沟通”。我们的每个项目,项目经理都会建立一个临时的IM群(旺旺)、一个临时的邮件列表,把项目干系人全部加入。邮件列表通常是通过第一封项目相关的邮件,把大家的email整理齐,在邮件最后说明“..._产品模块设计沟通会
文章浏览阅读730次,点赞25次,收藏13次。内核对象是Linux内核中的一个基本抽象,用于表示内核中的所有对象,如设备、模块、文件系统等。它不仅是系统资源的代表,还提供了一种标准化的方式来管理这些资源。内核对象(kobject)是Linux内核中用于管理和表示内核资源的抽象基础结构。kobject机制与sysfs紧密集成,提供了一种标准化的方法来管理不同类型的内核资源,并使内核能够以一种可扩展和动态的方式与用户空间交互。理解kobject对于开发和理解Linux设备驱动至关重要。
文章浏览阅读1.1k次。与一般的滑动验证码不同,某象的滑动还原验证码是将图像上下两块分割,然后在随机一块往右移动,将两块拼图移动成完整的图像才算成功,事实上,解决这类验证码比普通的验证码还要简单。_python还原验证图片
文章浏览阅读185次。在程序中,通常会使用独立线程来操作OpenFileDialog或者SaveFileDialog控件,但是在某些情况下(Win7系统下)调用 ShowDialog方法并不显示选择路径对话框。此时需要对启动线程的地方进行处理一下即可,方法如下: 方法一 Threadapp=newThread(newParameteriz在程序中,通常会使用独立线程来操作OpenFileDialog或者SaveFile..._win7 openfiledialog
文章浏览阅读321次。1、设置UILabel行间距12345NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString:label.text]; NSMutableParagraphStyle *sty_-[nsmutableparagraphstyle renderingmode]:
文章浏览阅读49次。毫无疑问,intel DRD部门面跪了,加上上次的DataCenter,现在已经是败上加败,加上近日看书效率太低,很多时候在同一个知识点打转,今天一天几乎没有看什么实质性内容。我觉得自己有几点需要注意:一、端正思想,开弓没有回头箭,既然选择了转行,选择了JAVA,即便是逆流而上,也要义无反顾的走下去!二、必须走一条高速、高效的道路。最重要的是第二点,让自己每天都能看到自己的进步,每...
文章浏览阅读160次。c:foreach>是我们在jsp页面中处理循环是所使用的标签如下,但是items中必须是一个集合,否则就会报错。_jsp
文章浏览阅读207次。IRQ中断服务函数是由操作系统或开发人员编写的函数,当IRQ中断请求到达服务器时,处理器会暂停当前任务,保存上下文,并跳转到相应的中断服务函数执行对应操作。_gtmr_irqhandler()
文章浏览阅读937次。Win7、Win8下用VS2013编译完的程序,拿到32位WindowsXP虚拟机下运行有时候会报错:解决办法如下:进入工程的属性,修改:再修改:即可转载于:https://www.cnblogs.com/predator-wang/p/4788814.html..._tts speak 不是有效的win32应用程序
文章浏览阅读762次。修改为 ttk.Combobox()根据Pycharm的自动导入class tkinter.tix.ComboBox,但根据Mannuals描述这个库应该已经废弃了Deprecated since version 3.6: This Tk extension is unmaintained and should not be used in new code. Use tkinter.ttk instead.所以导入ttk自动补全可知应该为ttk.Combobox()..._invalid command name ".!toplevel.!labelframe.!combobox4