在做Android应用程序中,连接网络的时候,常常要用到检测网络状态是否可用,在这里分享一个比较好用的方法。
本人参考:http://blog.csdn.net/sunboy_2050/article/details/7896313 在此只作记录,感谢原作者。
首先在Activity里,定义一个检测网络状态的方法:
/**
* 对网络连接状态进行判断
*
* @return true, 可用; false, 不可用
*/
private boolean isOpenNetwork() {
ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (connManager.getActiveNetworkInfo() != null) {
return connManager.getActiveNetworkInfo().isAvailable();
}
return false;
}
然后
/**
*网络可用就调用下一步需要进行的方法, 网络不可用则需设置
*/
private void initIntener() {
// 判断网络是否可用
if (isOpenNetwork() == true) {
// 网络可用,则开始加载。
initPross();//这里是我个人程序要进行网络加载的方法,根据自己的程序而定,灵活运用。
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("没有可用的网络").setMessage("是否对网络进行设置?");
builder.setPositiveButton("是", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = null;
try {
String sdkVersion = android.os.Build.VERSION.SDK;
if (Integer.valueOf(sdkVersion) > 10) {
intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);
} else {
intent = new Intent();
ComponentName comp = new ComponentName("com.android.settings",
"com.android.settings.WirelessSettings");
intent.setComponent(comp);
intent.setAction("android.intent.action.VIEW");
}
MainActivity.this.startActivity(intent);
} catch (Exception e) {
// Log.w(TAG,
// "open network settings failed, please check...");
e.printStackTrace();
}
}
}).setNegativeButton("否", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
//finish();//因为网络不可用的状态,也是不让自己的程序结束运行, 这是根据个人需要设置。
Toast.makeText(MainActivity.this, "网络异常,加载失败!", Toast.LENGTH_SHORT).show();
initAll();//这里是没有网络的时候,又不需要手动设置,则显示出来的一个静态页面,根据个人需要。
}
}).show();
}
}
然后把initIntener();方法在Activity的初始化方法实现就行了,启动Activity首先进行网络检测,再执行其他方法。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉标题栏
setContentView(R.layout.main);
//检测网络是否可用
initIntener();
}
最后需要在AndroidManifest.xml里添加相关权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
如有不对的地方,请大家多多指教。
本人参考:http://blog.csdn.net/sunboy_2050/article/details/7896313 在此只作记录,感谢原作者。
首先在Activity里,定义一个检测网络状态的方法:
/**
* 对网络连接状态进行判断
*
* @return true, 可用; false, 不可用
*/
private boolean isOpenNetwork() {
ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (connManager.getActiveNetworkInfo() != null) {
return connManager.getActiveNetworkInfo().isAvailable();
}
return false;
}
然后
/**
*网络可用就调用下一步需要进行的方法, 网络不可用则需设置
*/
private void initIntener() {
// 判断网络是否可用
if (isOpenNetwork() == true) {
// 网络可用,则开始加载。
initPross();//这里是我个人程序要进行网络加载的方法,根据自己的程序而定,灵活运用。
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("没有可用的网络").setMessage("是否对网络进行设置?");
builder.setPositiveButton("是", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = null;
try {
String sdkVersion = android.os.Build.VERSION.SDK;
if (Integer.valueOf(sdkVersion) > 10) {
intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);
} else {
intent = new Intent();
ComponentName comp = new ComponentName("com.android.settings",
"com.android.settings.WirelessSettings");
intent.setComponent(comp);
intent.setAction("android.intent.action.VIEW");
}
MainActivity.this.startActivity(intent);
} catch (Exception e) {
// Log.w(TAG,
// "open network settings failed, please check...");
e.printStackTrace();
}
}
}).setNegativeButton("否", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
//finish();//因为网络不可用的状态,也是不让自己的程序结束运行, 这是根据个人需要设置。
Toast.makeText(MainActivity.this, "网络异常,加载失败!", Toast.LENGTH_SHORT).show();
initAll();//这里是没有网络的时候,又不需要手动设置,则显示出来的一个静态页面,根据个人需要。
}
}).show();
}
}
然后把initIntener();方法在Activity的初始化方法实现就行了,启动Activity首先进行网络检测,再执行其他方法。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉标题栏
setContentView(R.layout.main);
//检测网络是否可用
initIntener();
}
最后需要在AndroidManifest.xml里添加相关权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
如有不对的地方,请大家多多指教。