我在这个过程中做得太迟了。我有很多屏幕/活动都需要连接到互联网,无论是wifi还是网络都无所谓。我可以检测到连接正常,但是我是否需要对每个活动执行此检查,或者是否有全局方式为我的应用程序执行此操作?
在添加大量代码之前我想过要问。
答案 0 :(得分:7)
您可以使用Activity
之类的内容InternetActivity
进行子类化,并在onResume
中检查连接。然后,您应用中需要互联网的所有活动都应该是InternetActivity
的子类,并会自动通过调用super.onResume()
或不覆盖onResume
进行检查。
答案 1 :(得分:2)
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;
}
}
}
}
检查Netowrk
在您的活动中
if(CheckNetwork.isInternetAvailable(MainActivtiy.this)) //if connection available
{
}
每当您想要检查互联网传递时,如果可用,则活动上下文返回true。
Detect whether there is an Internet connection available on Android
How to check internet access on Android? InetAddress never times out
答案 2 :(得分:0)
通过使用BroadcastReceiver,您可以想到另一个有趣的解决方案。所以现在你计划检查这么多次。您不会这样做,只会在网络连接发生变化时进行检查,并相应地通知您的网络模块。
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(YOUR_RECEIVER, filter);
答案 3 :(得分:-1)
正如Tushar回答above一样,继承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