需求提出
在自己之前写的demo ,发现产品用demo是没开网络误以为我的项目有问题。考虑加上一个网络监听功能。
解决之路
- 构建一个网络监听接口:异常弹出一个dialog然后跳到wifi开启页。重点:Intent里的东西的参数,我找了好久才确定跳转的Intent内容为
android.provider.Settings.ACTION_WIFI_SETTINGS
。
interface NetworkListener {
void isSucceeded();
void isFailure();
}
private NetworkListener networkListener = new NetworkListener() {
@Override
public void isSucceeded() {
Toast.makeText(MainActivity.this,"网络正常!",Toast.LENGTH_SHORT).show();
}
@Override
public void isFailure() {
Builder builder = new AlertDialog.Builder(MainActivity.this);
AlertDialog alertDialog = builder.create();
builder.setTitle("网络异常")//设置标题
.setMessage("请确定是否启用网络?")//提示消息
.setIcon(R.mipmap.ic_launcher)//设置图标
.setCancelable(true)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
//点击确定按钮执行的事件
@Override
public void onClick(DialogInterface dialog, int which) {
alertDialog.dismiss();
if(!isOnInternetConnect()){
// 弹到网络设置界面
Intent intent = null;
// 先判断当前系统版本
if(android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.GINGERBREAD_MR1){ // 3.0以上
intent = new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS);//跳转到wifi设置页面
}else{
intent = new Intent();
intent.setClassName("com.android.settings", "com.android.settings.WirelessSettings");
}
startActivity(intent);
}
}
}).create()//创建对话框
.show();//显示对话框
}
};
- 网络状态获取
private boolean isOnInternetConnect() {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
if (null != activeNetworkInfo){
//正常有网络
return true;
}else{
return false;
}
}
- 在Activity的合适周期中进行调用
@Override
protected void onStart() {
super.onStart();
if(isOnInternetConnect()){
networkListener.isSucceeded();
}else{
networkListener.isFailure();
}