使用Service和BroadcastReceiver实时监听网络状态
2016-01-21 11:03
603 查看
很多时候我们都需要实时监听网络状态,当网络状态发生变化后通知程序实行不同的策略。
这里,我采用Service+BroadcastReceiver的形式实时监听网络变化。
原理是程序在背后启一个Service,在Service中注册一个广播,当网络变化时会产生一个ConnectivityManager.CONNECTIVITY_ACTION事件,只要监听这个事件就可以了。代码如下:
别忘了在Manifast中配置这个Service:
Xml代码
还有权限:
Xml代码
在必要的地方启动该Service即可:
Java代码
这里,我采用Service+BroadcastReceiver的形式实时监听网络变化。
原理是程序在背后启一个Service,在Service中注册一个广播,当网络变化时会产生一个ConnectivityManager.CONNECTIVITY_ACTION事件,只要监听这个事件就可以了。代码如下:
package com.badgeviewtest; 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(){ @Override public void onReceive(Context arg0, 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); }else{ Log.d(tag,"没有可用网络"); } } } }; @Override public int onStartCommand(Intent intent, int flags, int startId) { // TODO Auto-generated method stub return super.onStartCommand(intent, flags, startId); } @Override public void onCreate() { super.onCreate(); IntentFilter mFilter = new IntentFilter(); mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver(mReceiver, mFilter); } @Override public void onDestroy() { super.onDestroy(); unregisterReceiver(mReceiver); } @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; } }
别忘了在Manifast中配置这个Service:
Xml代码
<service android:enabled="true" android:name="com.reyo.util.NetworkStateService" />
还有权限:
Xml代码
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
在必要的地方启动该Service即可:
Java代码
Intent i=new Intent(context,NetworkStateService.class); startService(i);
相关文章推荐
- 新版Matlab中神经网络训练函数Newff的使用方法
- java 发送 http 请求
- HTTP四种常见的POST提交数据方式
- 网络图片转为bitmap 转换为文件(File)保存至SD卡中
- POJ 1087 A Plug for UNIX(Dinic)
- HTTPS
- 使用check_tcp来监测端口是否通
- 判断当前网络是否可用
- ionic将ionicLoading与http请求绑定
- Android访问网络,使用HttpURLConnection还是HttpClient
- 配置ntpd提供网络授时服务
- 浅谈HTTP中Get与Post的区别(泽071…
- 1月第2周网络安全报告:应用程序漏洞居首 占85.3%
- iOS开发--Swift 基于AFNetworking 3.0的网络请求封装
- 关于使用asihttprequest请求无响应问题
- win8.1下 cocos2dx-js 多线程http请求的问题
- 后续博客移至 简书 http://www.jianshu.com/users/97cf7df43152/timeline
- JAVA并发处理经验(四)并行模式与算法7:AIO网络编程
- android 发送http请求
- 2016太原网络营销师郭文军分享网站图片代码优化