Android 换种方式监听网络变化_android 监听 网卡 linkup-程序员宅基地

技术标签: 转载  java  网络  android  

转载 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、结束

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/LHBTM/article/details/120902396

智能推荐

Unity 100面试题_unity100题-程序员宅基地

文章浏览阅读995次。原文_unity100题

12.路由安装-程序员宅基地

文章浏览阅读1k次,点赞29次,收藏11次。【校园二手交易平台】(微信小程序)安装vscode使用vscode打开后台系统项目在终端运行即可运行项目src/assets中存放静态资源src/components中存放组件app.vue是主界面(入口页面)注释main.ts中的package.json中是项目依赖的版本号注意安装插件README.md是项目启动的方式。

产品设计体会(3013)项目的“敏捷沟通”实践-程序员宅基地

文章浏览阅读48次。我一直觉得敏捷是理想与现实妥协的结果,是一种很好的实践,理论网上随便一搜就有很多,这次就说说我身边的团队,真实的实践,通过“沟通”的角度来讲,不妨起个名字叫做“敏捷沟通”。我们的每个项目,项目经理都会建立一个临时的IM群(旺旺)、一个临时的邮件列表,把项目干系人全部加入。邮件列表通常是通过第一封项目相关的邮件,把大家的email整理齐,在邮件最后说明“..._产品模块设计沟通会

Linux 设备驱动管理之内核对象(Kernel Object)机制-程序员宅基地

文章浏览阅读730次,点赞25次,收藏13次。内核对象是Linux内核中的一个基本抽象,用于表示内核中的所有对象,如设备、模块、文件系统等。它不仅是系统资源的代表,还提供了一种标准化的方式来管理这些资源。内核对象(kobject)是Linux内核中用于管理和表示内核资源的抽象基础结构。kobject机制与sysfs紧密集成,提供了一种标准化的方法来管理不同类型的内核资源,并使内核能够以一种可扩展和动态的方式与用户空间交互。理解kobject对于开发和理解Linux设备驱动至关重要。

全网首发,Python解决某象滑动还原验证码100%还原_python还原验证图片-程序员宅基地

文章浏览阅读1.1k次。与一般的滑动验证码不同,某象的滑动还原验证码是将图像上下两块分割,然后在随机一块往右移动,将两块拼图移动成完整的图像才算成功,事实上,解决这类验证码比普通的验证码还要简单。_python还原验证图片

Win7下多线程中OpenFileDialog和SaveFileDialog失效的解决办法(转载)-程序员宅基地

文章浏览阅读185次。在程序中,通常会使用独立线程来操作OpenFileDialog或者SaveFileDialog控件,但是在某些情况下(Win7系统下)调用 ShowDialog方法并不显示选择路径对话框。此时需要对启动线程的地方进行处理一下即可,方法如下: 方法一 Threadapp=newThread(newParameteriz在程序中,通常会使用独立线程来操作OpenFileDialog或者SaveFile..._win7 openfiledialog

随便推点

iOS开发经验总结(三)_-[nsmutableparagraphstyle renderingmode]:-程序员宅基地

文章浏览阅读321次。1、设置UILabel行间距12345NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString:label.text]; NSMutableParagraphStyle *sty_-[nsmutableparagraphstyle renderingmode]:

近日学习总结-程序员宅基地

文章浏览阅读49次。毫无疑问,intel DRD部门面跪了,加上上次的DataCenter,现在已经是败上加败,加上近日看书效率太低,很多时候在同一个知识点打转,今天一天几乎没有看什么实质性内容。我觉得自己有几点需要注意:一、端正思想,开弓没有回头箭,既然选择了转行,选择了JAVA,即便是逆流而上,也要义无反顾的走下去!二、必须走一条高速、高效的道路。最重要的是第二点,让自己每天都能看到自己的进步,每...

JSP中<c:foreach></c:foreach>标签注意事项_jsp <c:for>-程序员宅基地

文章浏览阅读160次。c:foreach>是我们在jsp页面中处理循环是所使用的标签如下,但是items中必须是一个集合,否则就会报错。_jsp

IRQ中断服务函数_gtmr_irqhandler()-程序员宅基地

文章浏览阅读207次。IRQ中断服务函数是由操作系统或开发人员编写的函数,当IRQ中断请求到达服务器时,处理器会暂停当前任务,保存上下文,并跳转到相应的中断服务函数执行对应操作。_gtmr_irqhandler()

报错:“不是有效的Win32应用程序”的解决办法-程序员宅基地

文章浏览阅读937次。Win7、Win8下用VS2013编译完的程序,拿到32位WindowsXP虚拟机下运行有时候会报错:解决办法如下:进入工程的属性,修改:再修改:即可转载于:https://www.cnblogs.com/predator-wang/p/4788814.html..._tts speak 不是有效的win32应用程序

_tkinter.TclError: invalid command name “tixComboBox“ 的解决办法_invalid command name ".!toplevel.!labelframe.!comb-程序员宅基地

文章浏览阅读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

推荐文章

热门文章

相关标签