使用Service和BroadcastReceiver实时监听网络状态
很多时候我们都需要实时监听网络状态,当网络状态发生变化后通知程序实行不同的策略。
这里,我采用Service+BroadcastReceiver的形式实时监听网络变化。
原理是程序在背后启一个Service,在Service中注册一个广播,当网络变化时会产生一个ConnectivityManager.CONNECTIVITY_ACTION事件,只要监听这个事件就可以了。代码如下:
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.IBinder;
import android.util.Log;public class NetworkStateService extends Service{private static final String tag="tag";private ConnectivityManager connectivityManager;private NetworkInfo info;private BroadcastReceiver mReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {Log.d(tag, "网络状态已经改变");connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);info = connectivityManager.getActiveNetworkInfo(); if(info != null && info.isAvailable()) {String name = info.getTypeName();Log.d(tag, "当前网络名称:" + name);//doSomething()} else {Log.d(tag, "没有可用网络");//doSomething()}}}};@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}@Overridepublic void onCreate() {super.onCreate();IntentFilter mFilter = new IntentFilter();mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);registerReceiver(mReceiver, mFilter);}@Overridepublic void onDestroy() {super.onDestroy();unregisterReceiver(mReceiver);}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {return super.onStartCommand(intent, flags, startId);}}
别忘了在Manifast中配置这个Service:
<service android:enabled="true" android:name="com.reyo.util.NetworkStateService" />
还有权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
在必要的地方启动该Service即可:
Intent i=new Intent(context,NetworkStateService.class);
startService(i);
另外附加几个 Android网络连接的判断
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; }
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; }
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; }
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; }
使用Service和BroadcastReceiver实时监听网络状态相关推荐
- Android实时监听网络状态
Android开发实时监听网络状态变化一般有两种方法: 1. 新建一个基类BasicActivity.class,在基类中注册网络监听广播NetworkChangeReceiver.class,所有页 ...
- uniapp 安卓端实时监听网络状态
写在uniapp的APP.vue的onShow方法中 uni.onNetworkStatusChange(function(res) { if (res.isConne ...
- 初识广播机制(监听网络状态的改变,监听网络是否可以使用)
Android系统中的广播机制比较灵活,因为Android中的每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序就只会接收到自己所关心的广播内容,这些广播可能是来自于系统的,也可能是来自于其他应 ...
- android 监听网络状态
今天,讲讲怎么监听手机网络状态的改变. 一.加入网络权限 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:nam ...
- Android通过使用系统广播监听网络状态的改变
Android通过使用广播监听网络状态的改变 得先添加权限 //查看网络状态<uses-permission android:name="android.permission.ACCE ...
- IOS-网络(监听网络状态)
1 // 2 // BWNetWorkTool.h 3 // IOS_0131_检测网络状态 4 // 5 // Created by ma c on 16/1/31. 6 // Copyright ...
- Android开发动态的监听网络状态的变化
主要思路:使用Android中的四大组件之:BrocastReceiver监听网络状态的变化.接收到网络状态改变的广播之后判断当前的网络是否可用. 创建广播接收器MyNetworkReceiver p ...
- 网络安全netstat监听网络状态。
网络安全netstat监听网络状态. Internet的通用语言是TCP/TP,它是一组协议,它规定在网络的第四层运输层有两种协议TCP.UDP.端口就是这两个协议打开的,端口分为源端口和目的端口,源 ...
- 1.1.14 Electron 监听网络状态
可以用window.addEventListener来进行时间监听网络状态 JavaScript的一种方式进行监听网络状态,监听的事件分别是online和offline. online : 如果链接上 ...
最新文章
- JZOJ 5399. 【NOIP2017提高A组模拟10.7】Confess
- Python基础概念_8_字符串处理
- Linux里的稀疏文件
- Jquery中的this是什么类型
- 【AI视野·今日Robot 机器人论文速览 第二十五期】Fri, 1 Oct 2021
- 【C语言】运算符与操作符的用法全面汇总(非常有用)
- 【洛谷】1600:天天爱跑步【LCA】【开桶】【容斥】【推式子】
- 使用DocFx生成文档网站并将其发布到GitHub Pages
- 哪些手机搭载鸿蒙,鸿蒙2.0搭载手机吗-有什么功能
- 浅谈 JSON 那些被转义的字符们
- 求解偏微分方程开源有限元软件deal.II学习--Step 13
- Java设计模式系列之迭代器模式
- 在 jdk 1.4 中打印iteye技术网站
- 高级人工智能之语音识别
- 【软件建模与UML】(持续更新)
- (精品)基于Web的酒店客房管理系统的设计与实现毕业论文+开题报告+项目源码(SSM)及数据库+查重报告
- FFmpeg的HEVC解码器源码简单分析:解码器主干部分
- 安装ubuntu8.04。。。。
- java 私有全局变量_java中的全局变量
- SwitchyOmega的简单使用