博客http://blog.csdn.net/androidbluetooth/article/details/6860146 详细的粘贴了很多判断网络的方法。
最近,遇到这样一个需求:
手机可以随时监听网络状态,如果网络状态发生变化要及时的更新 app 信息通知用户。
实现这个需求,有个较好的办法(个人认为,你一定有更好的办法,希望分享),分享给大家!
随时监听,需要实现一个 service 在后台监听网络状态,那麽如何接收到网络状态发生变化的信息呢?
恩,当然是 BroadcastReceiver.
网络状态发生变化的时候,系统会发出android.net.conn.CONNECTIVITY_CHANGE .
该值详细描述如下:
public static final String CONNECTIVITY_ACTION
Since: API Level 1
A change in network connectivity has occurred.
A connection has either been established or lost.
The NetworkInfo for the affected network is sent as an extra;
it should be consulted to see what kind of connectivity event occurred.
If this is a connection that was the result of failing over from a disconnected network,
then the FAILOVER_CONNECTION boolean extra is set to true.
For a loss of connectivity,
if the connectivity manager is attempting to connect (or has already connected) to another network,
the NetworkInfo for the new network is also passed as an extra.
This lets any receivers of the broadcast know that they should not necessarily tell the user that no data traffic will be possible.
Instead, the reciever should expect another broadcast soon,
indicating either that the failover attempt succeeded (and so there is still overall data connectivity),
or that the failover attempt failed, meaning that all connectivity has been lost.
For a disconnect event, the boolean extra EXTRA_NO_CONNECTIVITY is set to true if there are no connected networks at all.
Constant Value: "android.net.conn.CONNECTIVITY_CHANGE"
这是ConnectivityManager 类的一个常量。
ok,下面是实现的 demo :
package mark.zhang;
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 ListenNetStateService extends Service {
private ConnectivityManager connectivityManager;
private NetworkInfo info;
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
Log.d("mark", "网络状态已经改变");
connectivityManager = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
info = connectivityManager.getActiveNetworkInfo();
if(info != null && info.isAvailable()) {
String name = info.getTypeName();
Log.d("mark", "当前网络名称:" + name);
} else {
Log.d("mark", "没有可用网络");
}
}
}
};
@Override
public IBinder onBind(Intent intent) {
return null;
}
@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 int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
}
在 manifest 文件中需要加上一条权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
回头再看看关于CONNECTIVITY_ACTION 的介绍,从 api 中,我们还可以得到一个信息:
通过 intent 可以获取一些EXTRA,如EXTRA_NO_CONNECTIVITY。
boolean b = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, true);
更多信息可以参考ConnectivityManager.
分享到:
相关推荐
Android即时网络监听库,只需几行代码就可得到当前网络状态为wifi还是GPRS或是网络连接还是网络断开,监听犹如EventBus那般优雅。
Android 全局网络变化监听 How to To get a Git project into your build: Step 1. Add the JitPack repository to your build file Add it in your root build.gradle at the end of repositories: allprojects { ...
兼容Android29以下获取网络连接及网络类型的工具。
Network Connection Class 监听App中当前网络的流量然后对网络质量进行分类
1、用service和broadcastReceiver来时时监听网络状态。 2、判断网络连接状态的方法(如mobile网络和wifi网络) 3、用广播WifiManager.NETWORK_STATE_CHANGED_ACTION和ConnectivityManager.CONNECTIVITY_ACTION都行,...
Android 网络库和框架分析和教程 网络基础 ####介绍 输入 url:后会发生什么 与服务器端 API 交互: 改造 ####介绍 改造文档; 改造原则:& &,还集成了OKHttp; 毕加索原理: & ; RESTful (GET/PUT/POST...
其实手机在网络方面的的监听也比较重要,有时候我们必须实时监控这个程序的实时网络状态,android在网络断开与连接的时候都会发出广播,我们通过接收系统的广播就可以实现网络的监听。 1、添加访问网络和获取网络...
监听网络变化(Network status changed notification: (WWAN)2G,3G,4G,Wi-Fi,Not reachable) ####Requirements Minimum iOS Target iOS 7 #####添加 Framework CoreTelephony.framework #####添加下面这些文件: ...
Java实现网络监听
Android 判断当前网络是否可用简单实例 用户手机当前网络可用:WIFI、2G/3G网络,用户打开与不打开网络,和是否可以用是两码事。可以使用指的是:用户打开网络了并且可以连上互联网进行上网。 首页添加网络权限 ...
android network monitor的源代码
使用BroadcastReceiver广播接收器来接收网络状态(采用系统广播) BroadcastReceiver作为Android四大组件之一; Android:BroadcastReceiver广播接收器最全面解析 网络权限 <uses android:name=android.permission...
网络改变观察者 android网络改变了监听器使用观察者模式
这是在Eclipse环境下开发的android应用程序,主要是实现了在室内定位,获取所在地的经纬度信息
你可以使用 ConnectivityManager 来判断是否连到网络,以及网络类型。 判断是否有网络连接 下面的代码用ConnectivityManager查询是活动网络连接判断是否有Internet连接。 代码如下: ConnectivityManager cm = ...
单机搭建Android(解决 fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle fatal: error [Errno 101] Network is unreachable ),具体操作请阅readme.txt
在使用Android连接网络的时候,并不是每次都能连接到网络,在这个时候,我们最好是在程序启动的时候对网络的状态进行一下判断,如果没有网络则进行即时提醒用户进行设置。 要判断网络状态,首先需要有相应的权限,...
Deep Transfer Network: Unsupervised Domain Adaptation
Android 监听网络状态方法详解 一.加入网络权限 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限。 <uses Android:name=android.permission.ACCESS_NETWORK_STATE> 二.判断手机网络的几个方案 1)...
在活动中实时监听网络连接状态,包括移动网络和wifi网络。 执照 版权所有 2014 工磊 根据 Apache 许可,版本 2.0(“许可”)获得许可; 除非遵守许可,否则您不得使用此文件。 您可以在以下网址获取许可证副本 ...