android网络连接的判断
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网络连接的判断相关推荐
- android 网络连接 网络是否可用,Android 使用ping判断网络/WIFI连接是否可用
最近项目中有一个网络判断的需求,因为终端只能连接wifi,wifi即使连接上也可能会出现不能连接网络的问题,所以需要进行网络连接的判断. ping的相关知识 使用ping检验网络是否可以连接 ping ...
- Android网络连接异常处理方案
Android网络连接异常处理方案 参考文章: (1)Android网络连接异常处理方案 (2)https://www.cnblogs.com/yangcong/p/3523021.html 备忘一下 ...
- android 网络连接判断
Android 网络判断类,用来判断网络状态 使用方法: (1)先初始化 //初始化网络状态检测类 NetworkStateManager.instance().init(this); (2)判断是否 ...
- android 判断是否有网络连接,判断网络连接类型
当App需要进行网络连接获取数据时,先进行判断是否有网络连接,并且对网络类型进行判断,可以有效地避免对用户造成不必要的困惑和损失. /** 判断是否有网络连接* @author tianjie* @r ...
- 怎样检查Android网络连接状态
在发送任何HTTP请求前最好检查下网络连接状态,这样可以避免异常.这个教程将会介绍怎样在你的应用中检测网络连接状态. 创建新的项目 1.在Eclipse IDE中创建一个新的项目并把填入必须的信息. ...
- Android 网络连接--Wifi/3G
获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityMan ...
- Android 网络连接状态的监控
有些应用需要连接网络,例如更新后台服务,刷新数据等,最通常的做法是定期联网,直接使用网上资源.缓存数据或执行一个下载任务来更新数据. 但是如果终端设备没有连接网络,或者网速较慢,就没必要执行这些任务. ...
- Android网络连接监听
接收系统网络服务的广播接收者 public class NetStateReceiver extends BroadcastReceiver {private Handler handler;publ ...
- Android网络连接网络
(1)ConnectivityManager 在Android中,ConnectivityManager类代表网络连接服务,它被用来监控网络连接状态,配置失效重连,并控制网络天线等.获取Connect ...
- 如何高效优化Android网络连接以降低电耗
在开发android应用时应最大限度地减少下载和网络连接的电池寿命影响. 一.高效的连接优化下载 应用的影响: 无线电的状态机由三种能量状态组成: 1.全功率:当连接激活时使用,允许设备以最高的速率传 ...
最新文章
- 迟语寒:组队学习的那些事
- 特斯拉“撞死”机器人,是炒作还是事故?
- 【Qt】数据库实战(三)
- Linux权限管理总结(1)--基础权限
- 转换字符串为json对象的方法
- MFC绘图的几种方法
- bios是固定在微型计算机上的一块RoM,计算机硬件笔试试题
- nikita popov php,PHP中对performance的考虑点
- mysql添加字段自动记录加入时间、更新时间
- 数据结构之第一章一些概念
- debian修改主机名
- 我是如何在自学编程9个月后找到工作的
- Java并发编程之原子类
- 【快速幂】a^b%p问题
- 第一节课 opencv图像处理,对图片进行叠加处理
- 人参鹿鞭片39.9/花花公子裤子29/除螨仪9.9/三合一数据线8.8/阿迪达斯沐浴露39.9/超多好物你等!...
- 恒指赵鑫:8.9恒指德指实盘指导记录总结与晚盘前瞻
- python爬虫总结,看这篇就够了
- 目标跟踪常用算法——EKF篇
- Firefox 不知道如何打开此地址,因为协议 (javascrpit) 未和任何程序关联.
热门文章
- win7 使用扫描仪扫描照片
- [幽默笑话]初中英语书中的LiLei和Hanmeimei应该结婚了吧!(转载)
- 后端开发实习生面经(已收offer)中科院计算所下属某所
- 用Python算带有进度条的圆周率
- VMware 搭建私有云
- 大数据发展与情报资源整合的关系探索
- nodejs 写入html,html2markdownnodejs也能写爬虫?记一次blog迁移至Ghost
- AQS源码解读(六)——从PROPAGATE和setHeadAndPropagate()分析共享锁的传播性
- 古代帝王有哪些“恩爱夫妻”?
- Excel DATEDIF函数