开发的应用需要用到网络,当没有网络的时候,程序就直接奔溃了。感觉这样子的用户体验很差。于是就去网络上参考了一下解决方法。就是在开启应用的时候,进行网络的连接状态的检查,如果是没有连接网络就跳出提示。
参考了一下网络资源,我决定把他们整合起来,也方便以后自己的查询和使用。主要有两种。
1.这个直接上代码,大家一看就明白了。在网络没连接的时候,会提示跳转到设置去设置网络。
ConnectivityManager con = (ConnectivityManager) AndroidWelcome.this
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkinfo = con.getActiveNetworkInfo();
if (networkinfo == null || !networkinfo.isAvailable()) {}
判断完网络状态后:
// 网络未连接时,调用设置方法
private void setNetwork() {
Toast.makeText(this, "当前网络不可用,请检查设备网络连接!", Toast.LENGTH_SHORT).show();
Builder builder = new Builder(AndroidWelcome.this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("网络提示信息");
builder.setMessage("网络不可用,如果继续,请先设置网络!");
builder.setPositiveButton("设置", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = null;
/**
* 判断手机系统的版本!如果API大于10 就是3.0+ 因为3.0以上的版本的设置和3.0以
* 下的设置不一样,调用的方法不同。
*/
if (android.os.Build.VERSION.SDK_INT > 10) {
intent = new Intent(
android.provider.Settings.ACTION_WIFI_SETTINGS);
} else {
intent = new Intent();
ComponentName component = new ComponentName(
"com.android.settings",
"com.android.settings.WirelessSettings");
intent.setComponent(component);
intent.setAction("android.intent.action.VIEW");
}
startActivity(intent);
}
});
builder.setNegativeButton("取消", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
AndroidWelcome.this.finish();// 结束程序
}
});
builder.create();
builder.show();
}
/**
* 网络已经连接,然后去判断是wifi连接还是GPRS连接 设置一些自己的逻辑调用
*/
private void isNetworkAvailable() {
State gprs = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
.getState();
State wifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
.getState();
if (gprs == State.CONNECTED || gprs == State.CONNECTING) {
Toast.makeText(this, "当前使用的网络是3G !", Toast.LENGTH_SHORT).show();
}
if (wifi == State.CONNECTED || wifi == State.CONNECTING) {
Toast.makeText(this, "当前使用的网络是Wifi !", Toast.LENGTH_SHORT).show();
}
}
大家就可以将需要实现的功能和处理的事件添加到,有网络连接的if判断下去实现就可以了。
2.第二个,也是网络上看到的,没有去亲测。但是评语表示很多人在用。代码语句量也比较少,我下次开发可能也会选者它。上代码:
/**
* 检验网络连接 并toast提示
*
* @return
*/
public boolean note_Intent(Context context) {
ConnectivityManager con = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkinfo = con.getActiveNetworkInfo();
if (networkinfo == null || !networkinfo.isAvailable()) {
// 当前网络不可用
Toast.makeText(context.getApplicationContext(), "请先连接Internet!",
Toast.LENGTH_SHORT).show();
return false;
}
boolean wifi = con.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
.isConnectedOrConnecting();
if (!wifi) { // 提示使用wifi
Toast.makeText(context.getApplicationContext(), "建议您使用WIFI以减少流量!",
Toast.LENGTH_SHORT).show();
}
return true;
}
接下来,会发现,我们调用了系统的东西。那么权限设置是不能少的。不然就得不到数值。其实权限也就才2条,我为了保险起见,我设置了三条。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
功能介绍完~~
加个效果图: