我在这个过程中做的有点晚。我有很多屏幕/活动都需要连接到互联网,不管它的 wifi 或网络是否可以工作。我可以很好地检测到连接,但是我是否需要对每个活动都执行此检查,或者是否有一种全局方法可以为我的应用程序执行此操作?
只是想在添加大量代码之前我会问。
我在这个过程中做的有点晚。我有很多屏幕/活动都需要连接到互联网,不管它的 wifi 或网络是否可以工作。我可以很好地检测到连接,但是我是否需要对每个活动都执行此检查,或者是否有一种全局方法可以为我的应用程序执行此操作?
只是想在添加大量代码之前我会问。
您可以Activity
使用类似InternetActivity
的子类,并在其中onResume
检查连接。然后,您的应用程序中需要互联网的所有活动都应该是 的子类InternetActivity
,并且将通过调用super.onResume()
或根本不覆盖来自动进行检查onResume
。
public class CheckNetwork {
private static final String TAG = CheckNetwork.class.getSimpleName();
public static boolean isInternetAvailable(Context context)
{
NetworkInfo info = (NetworkInfo) ((ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
if (info == null)
{
Log.d(TAG,"no internet connection");
return false;
}
else
{
if(info.isConnected())
{
Log.d(TAG," internet connection available...");
return true;
}
else
{
Log.d(TAG," internet connection");
return true;
}
}
}
}
检查网络
在你的活动中
if(CheckNetwork.isInternetAvailable(MainActivtiy.this)) //if connection available
{
}
每次您想检查互联网传递时,如果可用,活动上下文返回 true,否则返回 false。
您可以想到另一个有趣的解决方案,即使用广播接收器。所以现在你计划检查很多次。而不是这样做,您将仅在网络连接更改时检查,并相应地通知您的网络模块。
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(YOUR_RECEIVER, filter);
正如 Tushar上面回答的那样,从类似的东西继承InternetActivity
很好,但onResume
除非您使用的某些服务经常需要互联网连接,否则您不应该签入它。相反,当像按钮点击这样的事件发生时检查它以转到下一个活动;因此,无需开始其他活动,您就可以显示 toast 来检查互联网连接。您应该为任何需要互联网的活动执行此操作,因为整个活动很少需要持续的互联网连接。
您可以在该超类中添加此方法:
private boolean isInternetConnected() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.getActiveNetworkInfo() != null
&& cm.getActiveNetworkInfo().isConnectedOrConnecting();
}
然后:
if(isInternetConnected())
//to the internet thing
else
//display toast