[Android] 实时动态监测网络变化
2016-09-12 22:40
399 查看
【需求分析】
当前的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
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories