1.网络连接是通过广播进行发送的

package ysl.netdemo;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.text.TextUtils;
import android.util.Log;public class NetWorkBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {// 监听网络连接状态变化Log.i("ysl","NetWorkBroadcastReceiver onReceive CONNECTIVITY_ACTION");String oldNetType = LetvBaseWebViewActivity.netType;String currentNetType = NetWorkTypeUtils.getNetTypeForWebView(context);String telecomOperators = NetWorkTypeUtils.getTelecomOperators(context);if (TextUtils.isEmpty(oldNetType)) {Log.i("ysl", "oldNetType为空!BaseWebView初始化有问题!");} else if (!oldNetType.equalsIgnoreCase(currentNetType)) {HashMap<String, Object> netMap = new HashMap<String, Object>();netMap.put("pre", oldNetType);netMap.put("now", currentNetType);Log.i("ysl", oldNetType+"-----------------"+currentNetType+"_________"+telecomOperators);netMap.put("result", 200);notifyAllObservers(netMap);LetvBaseWebViewActivity.netType = currentNetType;}else if (oldNetType.equalsIgnoreCase(currentNetType)) {Log.i("ysl", oldNetType+"=========="+currentNetType+"_________"+telecomOperators);}}}public interface NetWorkChangeObserver {void onNetTypeChange(HashMap<String, Object> netMap);}private static List<NetWorkChangeObserver> netWorkChangeObservers = new ArrayList<NetWorkChangeObserver>();public synchronized static void registerObserver(NetWorkChangeObserver observer) {if (!netWorkChangeObservers.contains(observer)) {netWorkChangeObservers.add(observer);}}public synchronized static void unRegisterObserver(NetWorkChangeObserver observer) {if (netWorkChangeObservers.contains(observer)) {netWorkChangeObservers.remove(observer);}}public void notifyAllObservers(HashMap<String, Object> netMap) {for (NetWorkChangeObserver observer : netWorkChangeObservers) {observer.onNetTypeChange(netMap);}}
}

2.注册广播接受者,就可以使用

NetWorkBroadcastReceiver receiver = new NetWorkBroadcastReceiver();IntentFilter filter = new IntentFilter();filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");registerReceiver(receiver, filter);

3.这有一个判断网络的工具类,可直接使用

package ysl.netdemo;import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.telephony.TelephonyManager;
import android.text.TextUtils;public class NetWorkTypeUtils {private static final int NETTYPE_WIFI = 5;private static final int NETTYPE_2G = 2;private static final int NETTYPE_3G = 3;private static final int NETTYPE_4G = 4;private static final int NETTYPE_UNKOWN = 0;private static final int NETTYPE_NO = 1;private static final String China_Mobile = "中国移动";private static final String China_Unicom = "中国联通";private static final String China_Telecom = "中国电信";private static final String China_Unkown = "不知道";private static ConnectivityManager connectivityManager;private static NetworkInfo networkInfo;public static String getNetTypeForWebView(Context context) {String type = "unknown";int netGeneration = NetWorkTypeUtils.getNetGeneration(context);switch (netGeneration) {case NetWorkTypeUtils.NETTYPE_WIFI:type = "wifi";break;case NetWorkTypeUtils.NETTYPE_2G:type = "2G";break;case NetWorkTypeUtils.NETTYPE_3G:type = "3G";break;case NetWorkTypeUtils.NETTYPE_4G:type = "4G";break;case NetWorkTypeUtils.NETTYPE_UNKOWN:type = "unknown";break;case NetWorkTypeUtils.NETTYPE_NO:type = "none";break;}return type;}private static int getNetGeneration(Context context) {connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);networkInfo = connectivityManager.getActiveNetworkInfo();if (networkInfo != null && networkInfo.isAvailable()) {String typeName = networkInfo.getTypeName();if ("WIFI".equalsIgnoreCase(typeName)) {return NETTYPE_WIFI;} else if ("MOBILE".equalsIgnoreCase(typeName)) {TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);switch (telephonyManager.getNetworkType()) {case TelephonyManager.NETWORK_TYPE_GPRS:case TelephonyManager.NETWORK_TYPE_EDGE:case TelephonyManager.NETWORK_TYPE_CDMA:case TelephonyManager.NETWORK_TYPE_1xRTT:case TelephonyManager.NETWORK_TYPE_IDEN:return NETTYPE_2G;case TelephonyManager.NETWORK_TYPE_UMTS:case TelephonyManager.NETWORK_TYPE_EVDO_0:case TelephonyManager.NETWORK_TYPE_EVDO_A:case TelephonyManager.NETWORK_TYPE_HSDPA:case TelephonyManager.NETWORK_TYPE_HSUPA:case TelephonyManager.NETWORK_TYPE_HSPA:case TelephonyManager.NETWORK_TYPE_EVDO_B:case TelephonyManager.NETWORK_TYPE_EHRPD:case TelephonyManager.NETWORK_TYPE_HSPAP:return NETTYPE_3G;case TelephonyManager.NETWORK_TYPE_LTE:return NETTYPE_4G;case TelephonyManager.NETWORK_TYPE_UNKNOWN:return NETTYPE_UNKOWN;default:return NETTYPE_UNKOWN;}}} else {return NETTYPE_NO;}return -1;}/*** 判断为哪个运营商*/public static String getTelecomOperators(Context context) {ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();String imsi = "";if (networkInfo != null && networkInfo.isAvailable()) {TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);imsi = telephonyManager.getSubscriberId();}if (!TextUtils.isEmpty(imsi)) {if (imsi.startsWith("46000") || imsi.startsWith("46002")) {return China_Mobile;} else if (imsi.startsWith("46001")) {return China_Unicom;} else if (imsi.startsWith("46003")) {return China_Telecom;}}return China_Unkown;}}

4.判断当前手机的信号强度

4.1 wifi变化的广播接收者

public class WifiChangeBroadcastReceiver extends BroadcastReceiver{private Context mContext;private TextView myText8;  public WifiChangeBroadcastReceiver(TextView myText8) {this.myText8 = myText8;}@Overridepublic void onReceive(Context context, Intent intent) {  mContext=context;  System.out.println("Wifi发生变化");  getWifiInfo();  }  private void getWifiInfo() {  WifiManager wifiManager = (WifiManager) mContext.getSystemService(mContext.WIFI_SERVICE);  WifiInfo wifiInfo = wifiManager.getConnectionInfo();  if (wifiInfo.getBSSID() != null) {  //wifi名称  String ssid = wifiInfo.getSSID();  //wifi信号强度  int level = WifiManager.calculateSignalLevel(wifiInfo.getRssi(), 5);  //wifi速度  int speed = wifiInfo.getLinkSpeed();  //wifi速度单位  String units = WifiInfo.LINK_SPEED_UNITS;  myText8.setText("Wifi发生变化"+"\n"+"ssid="+ssid+",level="+level+",speed="+speed+",units="+units);System.out.println("ssid="+ssid+",level="+level+",speed="+speed+",units="+units);  }  }
}

4.2 信号强度的各种信息

package zz.xinhaoqiangdu;import java.util.List;import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Handler;
import android.telephony.PhoneStateListener;
import android.telephony.SignalStrength;
import android.telephony.TelephonyManager;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends Activity { //TelephonyManager类的对象  private TelephonyManager Tel;  //MyPhoneStateListener类的对象,即设置一个监听器对象  private MyPhoneStateListener MyListener;private BroadcastReceiver receiver;private TextView myText8;private IntentFilter filter;  @Override  public void onCreate(Bundle savedInstanceState) {  //SignalStrength signalStrength;  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  myText8 = (TextView)findViewById(R.id.myText8); //初始化对象  MyListener = new MyPhoneStateListener();  //通过名字获得一个系统级服务  Tel = ( TelephonyManager )getSystemService(Context.TELEPHONY_SERVICE);  //设置监听器监听特定事件的状态  Tel.listen(MyListener ,PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);  receiver = new WifiChangeBroadcastReceiver();filter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);registerReceiver(receiver, filter);}  @Override  protected void onPause() {  super.onPause();  Tel.listen(MyListener, PhoneStateListener.LISTEN_NONE);  }  @Override  protected void onResume() {  super.onResume();  Tel.listen(MyListener,PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);  registerReceiver(receiver, filter);}  //监听器类  private class MyPhoneStateListener extends PhoneStateListener{  /*得到信号的强度由每个tiome供应商,有更新*/  TextView myText = (TextView)findViewById(R.id.myText);  TextView myText1=(TextView)findViewById(R.id.myText1);  TextView myText2=(TextView)findViewById(R.id.myText2);  TextView myText3=(TextView)findViewById(R.id.myText3);  TextView myText4=(TextView)findViewById(R.id.myText4);  TextView myText5=(TextView)findViewById(R.id.myText5);  TextView myText6=(TextView)findViewById(R.id.myText6);  TextView myText7=(TextView)findViewById(R.id.myText7);  @Override  public void onSignalStrengthsChanged(SignalStrength signalStrength){  //调用超类的该方法,在网络信号变化时得到回答信号  super.onSignalStrengthsChanged(signalStrength);  //cinr:Carrier to Interference plus Noise Ratio(载波与干扰和噪声比)  //Toast.makeText(getApplicationContext(), "Go to Firstdroid!!! GSM Cinr = "+ String.valueOf(signalStrength.getGsmSignalStrength()), Toast.LENGTH_SHORT).show();  int level = signalStrength.getLevel();int cdmaDbm = signalStrength.getCdmaDbm();int CdmaEcio = signalStrength.getCdmaEcio();int EvdoDbm = signalStrength.getEvdoDbm();int EvdoEcio = signalStrength.getEvdoEcio();int EvdoSnr = signalStrength.getEvdoSnr();int GsmBitErrorRate = signalStrength.getGsmBitErrorRate();int GsmSignalStrength = signalStrength.getGsmSignalStrength();myText.setText("level = "+ level);  //信号格数myText1.setText("cdmaDbm  = "+ cdmaDbm);  myText2.setText("CdmaEcio = "+ CdmaEcio);  myText3.setText("EvdoDbm = "+ EvdoDbm);  myText4.setText("EvdoEcio = "+ EvdoEcio);  myText5.setText("EvdoSnr = "+ EvdoSnr);  myText6.setText("GsmBitErrorRate = "+ GsmBitErrorRate);  myText7.setText("GsmSignalStrength = "+ GsmSignalStrength);//信号强度  }  } private class WifiChangeBroadcastReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {  System.out.println("Wifi发生变化");  WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);  WifiInfo wifiInfo = wifiManager.getConnectionInfo();  if (wifiInfo.getBSSID() != null) {  //wifi名称  final String ssid = wifiInfo.getSSID();  //wifi信号强度  final int level = WifiManager.calculateSignalLevel(wifiInfo.getRssi(), 5);  //wifi速度  final int speed = wifiInfo.getLinkSpeed();  //wifi速度单位  final String units = WifiInfo.LINK_SPEED_UNITS;  myText8.setText("Wifi发生变化"+"\n"+"ssid="+ssid+",level="+level+",speed="+speed+",units="+units);System.out.println("ssid="+ssid+",level="+level+",speed="+speed+",units="+units);  }   }  }@Overrideprotected void onDestroy() {unregisterReceiver(receiver);super.onDestroy();}}

xml文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="zz.xinhaoqiangdu.MainActivity" ><TextViewandroid:id="@+id/myText"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world" /><TextViewandroid:id="@+id/myText1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world" /><TextViewandroid:id="@+id/myText2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world" /><TextViewandroid:id="@+id/myText3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world" /><TextViewandroid:id="@+id/myText4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world" /><TextViewandroid:id="@+id/myText5"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world" /><TextViewandroid:id="@+id/myText6"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world" /><TextViewandroid:id="@+id/myText7"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world" /><TextViewandroid:id="@+id/myText8"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="50dip"android:text="监听wifi变化并获得当前信号强度" /></LinearLayout>

android网络连接的判断相关推荐

  1. android 网络连接 网络是否可用,Android 使用ping判断网络/WIFI连接是否可用

    最近项目中有一个网络判断的需求,因为终端只能连接wifi,wifi即使连接上也可能会出现不能连接网络的问题,所以需要进行网络连接的判断. ping的相关知识 使用ping检验网络是否可以连接 ping ...

  2. Android网络连接异常处理方案

    Android网络连接异常处理方案 参考文章: (1)Android网络连接异常处理方案 (2)https://www.cnblogs.com/yangcong/p/3523021.html 备忘一下 ...

  3. android 网络连接判断

    Android 网络判断类,用来判断网络状态 使用方法: (1)先初始化 //初始化网络状态检测类 NetworkStateManager.instance().init(this); (2)判断是否 ...

  4. android 判断是否有网络连接,判断网络连接类型

    当App需要进行网络连接获取数据时,先进行判断是否有网络连接,并且对网络类型进行判断,可以有效地避免对用户造成不必要的困惑和损失. /** 判断是否有网络连接* @author tianjie* @r ...

  5. 怎样检查Android网络连接状态

    在发送任何HTTP请求前最好检查下网络连接状态,这样可以避免异常.这个教程将会介绍怎样在你的应用中检测网络连接状态. 创建新的项目 1.在Eclipse IDE中创建一个新的项目并把填入必须的信息.  ...

  6. Android 网络连接--Wifi/3G

    获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityMan ...

  7. Android 网络连接状态的监控

    有些应用需要连接网络,例如更新后台服务,刷新数据等,最通常的做法是定期联网,直接使用网上资源.缓存数据或执行一个下载任务来更新数据. 但是如果终端设备没有连接网络,或者网速较慢,就没必要执行这些任务. ...

  8. Android网络连接监听

    接收系统网络服务的广播接收者 public class NetStateReceiver extends BroadcastReceiver {private Handler handler;publ ...

  9. Android网络连接网络

    (1)ConnectivityManager 在Android中,ConnectivityManager类代表网络连接服务,它被用来监控网络连接状态,配置失效重连,并控制网络天线等.获取Connect ...

  10. 如何高效优化Android网络连接以降低电耗

    在开发android应用时应最大限度地减少下载和网络连接的电池寿命影响. 一.高效的连接优化下载 应用的影响: 无线电的状态机由三种能量状态组成: 1.全功率:当连接激活时使用,允许设备以最高的速率传 ...

最新文章

  1. 迟语寒:组队学习的那些事
  2. 特斯拉“撞死”机器人,是炒作还是事故?
  3. 【Qt】数据库实战(三)
  4. Linux权限管理总结(1)--基础权限
  5. 转换字符串为json对象的方法
  6. MFC绘图的几种方法
  7. bios是固定在微型计算机上的一块RoM,计算机硬件笔试试题
  8. nikita popov php,PHP中对performance的考虑点
  9. mysql添加字段自动记录加入时间、更新时间
  10. 数据结构之第一章一些概念
  11. debian修改主机名
  12. 我是如何在自学编程9个月后找到工作的
  13. Java并发编程之原子类
  14. 【快速幂】a^b%p问题
  15. 第一节课 opencv图像处理,对图片进行叠加处理
  16. 人参鹿鞭片39.9/花花公子裤子29/除螨仪9.9/三合一数据线8.8/阿迪达斯沐浴露39.9/超多好物你等!...
  17. 恒指赵鑫:8.9恒指德指实盘指导记录总结与晚盘前瞻
  18. python爬虫总结,看这篇就够了
  19. 目标跟踪常用算法——EKF篇
  20. Firefox 不知道如何打开此地址,因为协议 (javascrpit) 未和任何程序关联.

热门文章

  1. win7 使用扫描仪扫描照片
  2. [幽默笑话]初中英语书中的LiLei和Hanmeimei应该结婚了吧!(转载)
  3. 后端开发实习生面经(已收offer)中科院计算所下属某所
  4. 用Python算带有进度条的圆周率
  5. VMware 搭建私有云
  6. 大数据发展与情报资源整合的关系探索
  7. nodejs 写入html,html2markdownnodejs也能写爬虫?记一次blog迁移至Ghost
  8. AQS源码解读(六)——从PROPAGATE和setHeadAndPropagate()分析共享锁的传播性
  9. 古代帝王有哪些“恩爱夫妻”?
  10. Excel DATEDIF函数