3

我在这个过程中做的有点晚。我有很多屏幕/活动都需要连接到互联网,不管它的 wifi 或网络是否可以工作。我可以很好地检测到连接,但是我是否需要对每个活动都执行此检查,或者是否有一种全局方法可以为我的应用程序执行此操作?

只是想在添加大量代码之前我会问。

4

4 回答 4

8

您可以Activity使用类似InternetActivity的子类,并在其中onResume检查连接。然后,您的应用程序中需要互联网的所有活动都应该是 的子类InternetActivity,并且将通过调用super.onResume()或根本不覆盖来自动进行检查onResume

于 2013-03-30T02:10:09.657 回答
4
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。

检测 Android 上是否有可用的 Internet 连接

如何检查Android上的互联网访问?InetAddress 永远不会超时

于 2013-03-30T04:02:39.147 回答
0

您可以想到另一个有趣的解决方案,即使用广播接收器。所以现在你计划检查很多次。而不是这样做,您将仅在网络连接更改时检查,并相应地通知您的网络模块。

IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);        
registerReceiver(YOUR_RECEIVER, filter);
于 2013-03-30T03:11:31.460 回答
-1

正如 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
于 2013-03-30T02:55:45.083 回答