在开发android应用时,涉及到要进行网络访问,时常需要进行网络状态的检查,以提供给用户必要的提醒。一般可以通过ConnectivityManager来完成该工作。
ConnectivityManager有四个主要任务:
1、监听手机网络状态(包括GPRS,WIFI, UMTS等)
2、手机状态发生改变时,发送广播
3、当一个网络连接失败时进行故障切换
4、为应用程序提供可以获取可用网络的高精度和粗糙的状态
当我们要在程序中监听网络状态时,只要一下几个步骤即可:
1、定义一个Receiver重载其中的onReceive函数,在其中完成所需要的功能,如根据WIFI和GPRS是否断开来改变空间的外观或者提示是否能访问网络
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 {
//改变背景或者 处理网络的全局变量
}
}
}
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();
}
}
//在AndroidManifest.xml中注册广播
<service android:enabled="true" android:name="com.boens.service.ConnectionChangeReceiver" ></service>
2、在适当的地方注册Receiver,可以在程序中注册,在onCreate中调用如下函数即可:
private void registerReceiver(){
IntentFilter filter=new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
myReceiver=new ConnectionChangeReceiver();
this.registerReceiver(myReceiver, filter);
}
3、在适当时取消注册Receiver,可以在程序中取消,在onDestroye中调用如下函数即可:
private void unregisterReceiver(){
this.unregisterReceiver(myReceiver);
}
4、Activity中注册广播
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;
记得添加访问网络需要的权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET" />