android-监听网络状态

1.注册一个广播接收器,监听网络状态
private void Start()
{
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
this.registerReceiver(myBroadcastReceiver, filter);
}

2.取消注册广播器
private void Stop()
{
this.unregisterReceiver(myBroadcastReceiver);
}

3.新建监听类NetworkConnectChangedReceiver继承BroadcastReceiver

public class NetworkConnectChangedReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// 这个监听wifi的打开与关闭,与wifi的连接无关
if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction()))
{
int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
switch (wifiState)
{
case WifiManager.WIFI_STATE_ENABLED:
Log.e("APActivity", "WIFI_STATE_ENABLED");
break;
case WifiManager.WIFI_STATE_ENABLING:
Log.e("APActivity", "WIFI_STATE_ENABLING");
break;
case WifiManager.WIFI_STATE_DISABLED:
Log.e("APActivity", "WIFI_STATE_DISABLED");
break;
case WifiManager.WIFI_STATE_DISABLING:
Log.e("APActivity", "WIFI_STATE_DISABLING");
break;
}
}
// 这个监听wifi的连接状态即是否连上了一个有效无线路由,当上边广播的状态是WifiManager.WIFI_STATE_DISABLING,和WIFI_STATE_DISABLED的时候,根本不会接到这个广播。
// 在上边广播接到广播是WifiManager.WIFI_STATE_ENABLED状态的同时也会接到这个广播,当然刚打开wifi肯定还没有连接到有效的无线
if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction()))
{
Parcelable parcelableExtra = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if (null != parcelableExtra)
{
NetworkInfo networkInfo = (NetworkInfo) parcelableExtra;
switch (networkInfo.getState())
{
case CONNECTED:
Log.e("APActivity", "CONNECTED");
break;
case CONNECTING:
Log.e("APActivity", "CONNECTING");
break;
case DISCONNECTED:
Log.e("APActivity", "DISCONNECTED");
break;
case DISCONNECTING:
Log.e("APActivity", "DISCONNECTING");
break;
case SUSPENDED:
Log.e("APActivity", "SUSPENDED");
break;
case UNKNOWN:
Log.e("APActivity", "UNKNOWN");
break;
default:
break;
}
}
}
// 这个监听网络连接的设置,包括wifi和移动数据的打开和关闭。
// 最好用的还是这个监听。wifi如果打开,关闭,以及连接上可用的连接都会接到监听。见log
// 这个广播的最大弊端是比上边两个广播的反应要慢,如果只是要监听wifi,我觉得还是用上边两个配合比较合适
if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction()))
{
NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
if (info != null)
{
StringBuilder sb = new StringBuilder();
sb.append("info.getTypeName() : " + info.getTypeName() + "\n");
sb.append("getSubtypeName() : " + info.getSubtypeName() + "\n");
sb.append("getState() : " + info.getState() + "\n");
sb.append("getDetailedState() : " + info.getDetailedState().name() + "\n");
sb.append("getDetailedState() : " + info.getExtraInfo() + "\n");
sb.append("getType() : " + info.getType());
Log.e("APActivity", sb.toString());
}
}
}
}

当网络连接接通的时候,是用的是Wifi或者3G网络。利用本文所述,可以实现记录何时使用的是Wifi,何时使用的是3G网络。

public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) {
NetworkInfo ni = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
if (ni.getState() == State.CONNECTED && ni.getType() == ConnectivityManager.TYPE_WIFI) {
Log.v("kevin", "wifi connected");
} else if(ni.getState() == State.DISCONNECTED && ni.getType() == ConnectivityManager.TYPE_WIFI){
Log.v("kevin", "wifi disconnected");
}
}
}
}

时间: 2024-08-07 04:32:45

android-监听网络状态的相关文章

android 监听网络状态的变化及实战

android 监听网络状态的变化及实际应用 转载请注明博客地址:http://blog.csdn.net/gdutxiaoxu/article/details/53008266 平时我们在请求错误的情况下,通常会进行处理一下,一般来说,主要分为两方面的错误 - 没有网络的错误 - 在有网络的情况下,我们客户端的错误或者服务器端的错误 今天这篇博客主要阐述以下问题 怎样监听网络状态的变化,包括是否打开WiFi,否打开数据网络,当前连接的网络是否可用 网络没有打开情况下的处理,如弹出对话框,跳转到

Android监听网络状态

该笔记是用来实时获取网络的状态,有点想QQ的断网提醒,为了以后的工作中用到,就在此处写下关于此判断的代码,下面就是写的一些代码: package com.example.nettest; import receiver.NetReceiver; import android.app.Activity; import android.content.IntentFilter; import android.net.ConnectivityManager; import android.os.Bun

Android实时监听网络状态

在开发android应用时,涉及到要进行网络访问,时常需要进行网络状态的检查,以提供给用户必要的提醒.一般可以通过ConnectivityManager来完成该工作. ConnectivityManager有四个主要任务: 1.监听手机网络状态(包括GPRS,WIFI, UMTS等) 2.手机状态发生改变时,发送广播 3.当一个网络连接失败时进行故障切换 4.为应用程序提供可以获取可用网络的高精度和粗糙的状态 当我们要在程序中监听网络状态时,只要一下几个步骤即可:  1.处理Recevier接口

监听网络状态

网络监听的自己写过一个,刚在github上找到一个,先保存着,以后直接用 原文地址:https://github.com/GHdeng/NetMonitor 使用广播监听网络变化 ###需求确认 监听当前网络的状态和类型 类似京东客户端,当网络发生变化时相应更新UI界面 ###制作流程 使用广播监听当前网络的状态. 配合Application周期注册监听,使得每个界面都继续监听 抽出BaseActivity类实现回调 #####1.继承BroadcastReceiver实现onReceive方法

android监听SIM状态

/* 监听sim状态改变的广播,返回sim卡的状态, 有效或者无效. 双卡中只要有一张卡的状态有效即返回状态为有效,两张卡都无效则返回无效. */ import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.telephony.TelephonyManager;

Android使用BroadcastReceiver监听网络状态

在开发中,经常会遇到需要判断手机网络状态从而进行各种操作的功能,在这里简单介绍下这种功能的实现. 如题,通过BroadcastReceiver我们能在网络状态改变的时候监听到它. 那么,注册广播的两种方式: 1.静态注册:在AndroidManifest.xml中用标签声明注册,并在标签内用标签设置过滤器. 1 2 3 4 5 6 7 <!--继承BroadcastReceiver,重写onReceiver方法--> <receiver android:name="MyRece

Android 监听网络变化

Android开发之使用广播监听网络状态变化

我们经常需要判断网络状态的变化,如有无网络,所以需要监听网络状态的变化,比如网络断开,网络连接给予友好提示.如何监听网络状态的变化呢,最近工作中需要用到这个,于是就用广播机制来实现了网络状态的监听. 使用广播机制来监听网络状态主要涉及到以下几点: 1.需要自己编写个网络广播接收器,该接收器继承BroadcastReceiver类,用来接收系统发出的广播.比如我自己写了个NetStatusReceiver广播接收器.代码如下: package com.log.system; import andr

Android实践--监測网络状态

Android 监測网络状态 我们在使用Android手机时候,一些APP须要网络环境才干执行,所以手机须要可用的网络,无论是2G.3G或者WIFI.甚至有一些比較耗流量的APP仅仅能在WIFI的环境下执行,或者提供用户自行选择是否仅仅能在WIFI环境下执行,作为用户貌似后者体验更好.那么作为开发人员,我们仅仅须要几步就能给用户这样的体验. ------------------------------------------------------------------------------