- 首先需要在AndroidManifest文件中添加网络访问和网络状态权限
- 判断应用是否有网络的工具类,如果没网络弹出对话框,需手动开启网络
- 这里的Context不清楚的可以看我另一篇文章:Android安卓 如何在Service获取参数Context 以及alertDialog.Builder(Context)的Context
public class NetworkUtils {
public static boolean isNetworkAvalible(Context context) {
//检测API是不是小于23,因为到了API23之后getNetworkInfo(int networkType)方法被弃用
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP){
//获得ConnectivityManager对象
ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
//获取WIFI连接的信息
NetworkInfo wifiNetworkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
//获取移动数据连接的信息
NetworkInfo dataNetworkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
//无线网连接和数据网连接都断开
if (!wifiNetworkInfo.isConnected() && !dataNetworkInfo.isConnected()) {
return false;
}
//无线网连接和数据网连接一个
return true;
//API大于23时使用下面的方式进行网络监听
}else{
// 获得网络状态管理器
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager == null) {
return false;
} else {
// 建立网络数组
NetworkInfo[] net_info = connectivityManager.getAllNetworkInfo();
if (net_info != null) {
for (int i = 0; i < net_info.length; i++) {
// 判断获得的网络状态是否是处于连接状态
if (net_info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}
}
// 如果没有网络,则弹出网络设置对话框
public static void checkNetwork(final Context context) {
if (!NetworkUtils .isNetworkAvalible(context)) {
new alertDialog.Builder(context)
.setTitle("网络状态提示")
.setMessage("没有可以使用的网络,请先设置网络!")
.setCancelable(false)
.setIcon(R.mipmap.logo)
.setPositiveButton("设置",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
// 跳转到设置界面
context.startActivity(new Intent(
Settings.ACTION_WIRELESS_SETTINGS));
}
}).create().show();
}
return;
}
}
- 如果需要全局提示接着按下面的步骤来
- 创建一个NetWorkStateReceiver类,继承BroadcastReceiver,调用checkNetwork()方法,保证在调用此方法的activity中都能检测到网络是否连接
public class NetWorkStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NetworkUtils .checkNetwork(context);
}
}
- 在xxxActivity中显式的注册和取消注册广播,在onResume()方法中注册,在onPause()方法中取消注册
private NetWorkStateReceiver mNetWorkStateReceiver;
@Override
protected void onResume() {
if (mNetWorkStateReceiver== null) {
mNetWorkStateReceiver= new NetWorkStateReceiver();
}
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(mNetWorkStateReceiver, filter);
super.onResume();
}
@Override
protected void onPause() {
unregisterReceiver(mNetWorkStateReceiver);
super.onPause();
}
以上是全局提示
- 接下来是局部提示,如果app支持离线操作只需要,在特定的页面提示需要连接网络即可.
- 在Service层中
- 如果需要在刚进入页面时就提示,则需要在Service层中的init方法中添加NetworkUtils.checkNetwork(xxxActivity.xxx);方法即可
- 如果需要点击某个按钮触发,则只需在对应按钮的点击事件中添加上方代码即可
- 结束
参考:https://blog.csdn.net/zxc514257857/article/details/59175179?



