[Android] 实时动态监测网络变化
来源:互联网 发布:php 商城怎么删除订单 编辑:程序博客网 时间:2024/06/12 11:38
【需求分析】
当前的App一般都需要与网络进行通信,而这其中一个重要的方面就是能够及时监测处网络状态的变化,因此也就也有本次的需求:动态监测当前手机网络状态的变化,包括以下几个方面:1. 手机无网络到有网络 2. 手机有网络到无网络 3. 手机网络Wifi-> 手机移动网络(2/3/4 G)4.手机移动网络(2/3/4 G)-> 手机网络Wifi
【动画效果】
通过Toast展示各种状态的变化
【实现方案】
核心方案:1. 动态注册广播监听网络状态的变化 2. 根据系统API得到当前的网络类型
注意:由于需要判断网络类型,需要在Manifest.xml中添加网络访问权限
【代码展示】
package com.test.networkchangetest;import android.content.IntentFilter;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity { private NetworkChangeBroadcast networkChangeBroadcast = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); networkChangeBroadcast = new NetworkChangeBroadcast(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); registerReceiver(networkChangeBroadcast, intentFilter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(networkChangeBroadcast); }}
package com.test.networkchangetest;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.util.Log;import android.widget.Toast;public class NetworkChangeBroadcast extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.d("NetworkChangeBroadcast", "network changed!"); boolean isNetworkAvailable = false, isWifiAvailable = false, isMobileAvailable = false; ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); if (networkInfo != null) { isNetworkAvailable = networkInfo.isAvailable(); isWifiAvailable = networkInfo.isAvailable() && (networkInfo.getType() == ConnectivityManager.TYPE_WIFI); isMobileAvailable = networkInfo.isAvailable() && (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE); } if (isNetworkAvailable) { if (isWifiAvailable) { Toast.makeText(context, "当前网络状态:Wifi 可用", Toast.LENGTH_SHORT).show(); } else if (isMobileAvailable) { Toast.makeText(context, "当前网络状态:移动网络可用", Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(context, "当前网络状态:网络不可用", Toast.LENGTH_SHORT).show(); } }}
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
【个人总结】
- 动态注册广播监听网络的变化,在onCreate中注册,onDestroy中反注册
- 判断当前网络状态,通过getSystemService得到ConnectivityManager来得到NetworkInfo,从而拿到当前的网络链接状态
- 访问网络状态需要在Manifest中添加网络访问权限android.permission.ACCESS_NETWORK_STATE
0 0
- [Android] 实时动态监测网络变化
- android 实时监测网络变化
- Android 实时监测(监听)网络连接状态变化
- Android 实时监测(监听)网络连接状态变化
- Android 实时监测(监听)网络连接状态变化
- Android 实时监测(监听)网络连接状态变化
- Android实时监听是否有网络,常驻广播——监测网络变化
- 监测TextField实时变化
- Android 监测手机网络状态变化
- Android 如何实时监测当前网络状态
- Android杂谈之网络实时监测
- AFnetworking监测网络变化
- ios0监测网络变化
- 时时监测网络变化
- 实时监测网络状态
- 网络状态实时监测
- Android 动态监听网络变化
- Android监测手机网络状态变化的广播
- 嵌入式实时操作系统ucos/ii 原理与应用(三)
- 【华为OJ12】字符串反转
- tjut 3584
- Python for Data Analysis (5)
- 167. Two Sum II - Input array is sorted
- [Android] 实时动态监测网络变化
- SFDC 测试类注意事项
- 数组与指针
- Hibernate学习笔记:难点,常见面试题
- ios键盘的第一响应者和打开关闭触发的通知
- BGRABitmap图像操作9d:渲染前面的水纹
- WebService理解和代码解析
- 关于计算机视觉的各种库儿们
- 微信退款