首页 > 系统 > Android > 正文

Android 对手机网络的检测和监听的方法示例

2019-10-22 18:14:00
字体:
来源:转载
供稿:网友

此次分享内容

android,监听网络,网络监听,网络检测

使用BroadcastReceiver广播接收器来接收网络状态(采用系统广播)

BroadcastReceiver作为Android四大组件之一;
Android:BroadcastReceiver广播接收器最全面解析

网络权限

<uses-permission android/194683.html">android/273439.html">android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.INTERNET"/>

自定义广播接收器

public class NetWorkStateReceiver extends BroadcastReceiver {  @Override  public void onReceive(Context context, Intent intent) {    System.out.println("网络状态发生变化");    //检测API是不是小于23,因为到了API23之后getNetworkInfo(int networkType)方法被弃用    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) {      //获得ConnectivityManager对象      ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);      //获取ConnectivityManager对象对应的NetworkInfo对象      //获取WIFI连接的信息      NetworkInfo wifiNetworkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);      //获取移动数据连接的信息      NetworkInfo dataNetworkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);      if (wifiNetworkInfo.isConnected() && dataNetworkInfo.isConnected()) {        Toast.makeText(context, "WIFI已连接,移动数据已连接", Toast.LENGTH_SHORT).show();      } else if (wifiNetworkInfo.isConnected() && !dataNetworkInfo.isConnected()) {        Toast.makeText(context, "WIFI已连接,移动数据已断开", Toast.LENGTH_SHORT).show();      } else if (!wifiNetworkInfo.isConnected() && dataNetworkInfo.isConnected()) {        Toast.makeText(context, "WIFI已断开,移动数据已连接", Toast.LENGTH_SHORT).show();      } else {        Toast.makeText(context, "WIFI已断开,移动数据已断开", Toast.LENGTH_SHORT).show();      }//API大于23时使用下面的方式进行网络监听    }else {      System.out.println("API level 大于23");      //获得ConnectivityManager对象      ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);      //获取所有网络连接的信息      Network[] networks = connMgr.getAllNetworks();      //用于存放网络连接信息      StringBuilder sb = new StringBuilder();      //通过循环将网络信息逐个取出来      for (int i=0; i < networks.length; i++){        //获取ConnectivityManager对象对应的NetworkInfo对象        NetworkInfo networkInfo = connMgr.getNetworkInfo(networks[i]);        sb.append(networkInfo.getTypeName() + " connect is " + networkInfo.isConnected());      }      Toast.makeText(context, sb.toString(),Toast.LENGTH_SHORT).show();    }  }}

注册广播

  1. 动态注册
  2. 静态注册

动态注册

public class MainActivity extends AppCompatActivity {  NetWorkStateReceiver netWorkStateReceiver;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);  }  //在onResume()方法注册  @Override  protected void onResume() {    if (netWorkStateReceiver == null) {      netWorkStateReceiver = new NetWorkStateReceiver();    }    IntentFilter filter = new IntentFilter();    filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);    registerReceiver(netWorkStateReceiver, filter);    System.out.println("注册");    super.onResume();  }  //onPause()方法注销  @Override  protected void onPause() {    unregisterReceiver(netWorkStateReceiver);    System.out.println("注销");    super.onPause();  }}

静态注册

在AndroidManifest.xml进行广播的静态注册

<receiver android:name=".NetWorkStateReceiver">   <intent-filter> //检测网络变化的acton    <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>     <category android:name="android.intent.category.DEFAULT" />   </intent-filter> </receiver> 

至此,今天分享完毕,这样就可以实现对网络状态的实时监听了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VEVB武林网。


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表