Android 实时监听网络状态
2016-01-29 10:51
701 查看
在开发android应用时,涉及到要进行网络访问,时常需要进行网络状态的检查,以提供给用户必要的提醒。一般可以通过ConnectivityManager来完成该工作。
ConnectivityManager有四个主要任务:
1、监听手机网络状态(包括GPRS,WIFI, UMTS等)
2、手机状态发生改变时,发送广播
3、当一个网络连接失败时进行故障切换
4、为应用程序提供可以获取可用网络的高精度和粗糙的状态
当我们要在程序中监听网络状态时,只要一下几个步骤即可:
1、定义一个Receiver重载其中的onReceive函数,在其中完成所需要的功能,如根据WIFI和GPRS是否断开来改变空间的外观或者提示是否能访问网络
2、在适当的地方注册Receiver,可以在程序中注册,在onCreate中调用如下函数即可:
3、在适当时取消注册Receiver,可以在程序中取消,在onDestroye中调用如下函数即可:
4、Activity中注册广播
记得在 Activity中 设置变量 private ConnectionChangeReceiver myReceiver;
记得添加访问网络需要的权限
ConnectivityManager有四个主要任务:
1、监听手机网络状态(包括GPRS,WIFI, UMTS等)
2、手机状态发生改变时,发送广播
3、当一个网络连接失败时进行故障切换
4、为应用程序提供可以获取可用网络的高精度和粗糙的状态
当我们要在程序中监听网络状态时,只要一下几个步骤即可:
1、定义一个Receiver重载其中的onReceive函数,在其中完成所需要的功能,如根据WIFI和GPRS是否断开来改变空间的外观或者提示是否能访问网络
[code]package com.bsharksdk.receiver; import com.bsharksdk.main.BSharkApi; import com.bsharksdk.ui.BSToast; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo; /** * @author Javen * */ public class ConnectionChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager connectivityManager=(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mobNetInfo=connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); NetworkInfo wifiNetInfo=connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) { BSToast.showLong(context, "网络不可以用");//BSToast为显示提示的类 //改变背景或者 处理网络的全局变量 }else { //改变背景或者 处理网络的全局变量 } } }
[code]package com.boens.service; import android.content.Context; import android.widget.Toast; public class BSToast { public static void showLong(Context context, String infostr) { Toast.makeText(context, infostr, Toast.LENGTH_LONG).show(); } public static void showShort(Context context, String infostr) { Toast.makeText(context, infostr, Toast.LENGTH_SHORT).show(); } }
[code]//在AndroidManifest.xml中注册广播 <service android:enabled="true" android:name="com.boens.service.ConnectionChangeReceiver" ></service>
2、在适当的地方注册Receiver,可以在程序中注册,在onCreate中调用如下函数即可:
[code]private void registerReceiver(){ IntentFilter filter=new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); myReceiver=new ConnectionChangeReceiver(); this.registerReceiver(myReceiver, filter); }
3、在适当时取消注册Receiver,可以在程序中取消,在onDestroye中调用如下函数即可:
[code]private void unregisterReceiver(){ this.unregisterReceiver(myReceiver); }
4、Activity中注册广播
[code]package com.boens.login; import android.app.Activity; import android.content.Intent; import android.content.IntentFilter; import android.net.ConnectivityManager; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.RelativeLayout; import com.boens.homepage.R; import com.boens.service.ConnectionChangeReceiver; import com.boens.tools.DecodeSampledBitmapFromResource; /* * 欢迎动画加载 */ public class FirstActivity extends Activity { private Button registerButton; private Button loginButton; private ImageView imageView_icon; private static FirstActivity first_Activity; private ConnectionChangeReceiver myReceiver; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.firstpage_login); first_Activity = this; **registerReceiver();** registerButton = (Button) findViewById(R.id.register_btn_first); loginButton = (Button) findViewById(R.id.login_btn_first); //background_first = (RelativeLayout) findViewById(R.id.background_first); imageView_icon = (ImageView) findViewById(R.id.icon_imageview_first); //加载位图像素为200*200 imageView_icon.setImageBitmap(DecodeSampledBitmapFromResource.decodeSampledBitmapFromResource(getResources(), R.drawable.logohuban, 200, 200)); loginButton.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View arg0) { Intent intent = new Intent(); intent.setClass(FirstActivity.this, com.boens.login.MainActivity.class); startActivity(intent); } }); registerButton.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View arg0) { Intent intent = new Intent(); intent.setClass(FirstActivity.this, com.boens.login.RegisterActivity.class); startActivity(intent); } }); } /*注册网络状态监听*/ **private void registerReceiver(){ IntentFilter filter=new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); myReceiver=new ConnectionChangeReceiver(); this.registerReceiver(myReceiver, filter); }** /*取消网络状态监听*/ **public void unregisterReceiver(){ this.unregisterReceiver(myReceiver); }** //程序退出时可获取实例来调用unregisterReceiver()方法取消广播 public static FirstActivity getInstance() { if (first_Activity != null) { return first_Activity; } return null; } }
记得在 Activity中 设置变量 private ConnectionChangeReceiver myReceiver;
记得添加访问网络需要的权限
[code]<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.INTERNET" />
相关文章推荐
- iOS 【OC 封装网络请求业务类(AFHTTPSessionManager)】
- 利用openWRT模拟网络丢包和延迟
- iOS socket连接和http连接的区别
- 卷积神经网络Lenet-5实现
- Python 网络编程socket说明
- Android中进行https连接的方式
- TCP三次握手/四次挥手 及 状态变迁图
- HTTP状态码(HTTP Status Code)
- Android开发笔记-使用Volley开源库进行Http网络请求(POST方式)
- 使用HttpsURLConnection发送POST请求
- Android Http协议
- 网络数据截取工具-抓包
- 透过浏览器看HTTP缓存
- TC SRM 680(div 2) 1000pts
- HTTPS的建立流程
- 使用boost::asio开发网络服务器
- 厦门巨游网络科技有限公司(HOTPOWER)承接游戏UI外包
- [网络通信]socket编程相关
- 节点重新启动、驱逐或 CRS 意外重启
- 【开源中国Android客户端】源码分析 网络数据传输接口