android开发分享检测Android上是否有可用的Internet连接


可能重复:
如何检查Android的互联网接入? InetAddress从不超时

我需要检测Android设备是否连接到Internet。

NetworkInfo类提供了一个非静态方法isAvailable() ,听起来很完美。

问题是:

 NetworkInfo ni = new NetworkInfo(); if (!ni.isAvailable()) { // do something } 

抛出这个错误:

 The constructor NetworkInfo is not visible. 

安全的赌注是有另一个类返回一个NetworkInfo对象。 但我不知道是哪一个。

    ConnectivityManagergetActiveNetworkInfo()方法返回一个NetworkInfo实例,表示可以find的第一个连接的networking接口,如果没有接口ConnectivityManager返回null 。 检查这个方法是否返回null应该足以说明互联网连接是否可用。

     private boolean isNetworkAvailable() { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); return activeNetworkInfo != null && activeNetworkInfo.isConnected(); } 

    您还需要:

     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

    在你的Android清单。

    编辑:

    请注意,拥有活动的networking接口并不能保证特定的networking服务可用。 networking问题,服务器停机时间,低信号,强制门户,内容filter等都可以阻止你的应用程序到达服务器。 例如,您无法确定您的应用是否可以访问Twitter,直到您收到来自Twitter服务的有效回复。

    我检查无线上网和移动互联网如下…

     private boolean haveNetworkConnection() { boolean haveConnectedWifi = false; boolean haveConnectedMobile = false; ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo[] netInfo = cm.getAllNetworkInfo(); for (NetworkInfo ni : netInfo) { if (ni.getTypeName().equalsIgnoreCase("WIFI")) if (ni.isConnected()) haveConnectedWifi = true; if (ni.getTypeName().equalsIgnoreCase("MOBILE")) if (ni.isConnected()) haveConnectedMobile = true; } return haveConnectedWifi || haveConnectedMobile; } 

    显然,它可以很容易地修改,以检查个别特定的连接types,例如,如果您的应用程序需要Wi-Fi的潜在更高的速度正常工作等。

    第1步:在你的项目中创build一个类AppStatus(你也可以给其他名字)。 那么请把下面的代码粘贴到你的代码中:

     import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.util.Log; public class AppStatus { private static AppStatus instance = new AppStatus(); static Context context; ConnectivityManager connectivityManager; NetworkInfo wifiInfo, mobileInfo; boolean connected = false; public static AppStatus getInstance(Context ctx) { context = ctx.getApplicationContext(); return instance; } public boolean isOnline() { try { connectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); connected = networkInfo != null && networkInfo.isAvailable() && networkInfo.isConnected(); return connected; } catch (Exception e) { System.out.println("CheckConnectivity Exception: " + e.getMessage()); Log.v("connectivity", e.toString()); } return connected; } } 

    第2步:现在检查您的设备是否具有networking连接,然后只要添加此代码段,你想检查的地方…

     if (AppStatus.getInstance(this).isOnline()) { Toast t = Toast.makeText(this,"You are online!!!!",8000).show(); } else { Toast t = Toast.makeText(this,"You are not online!!!!",8000).show(); Log.v("Home", "############################You are not online!!!!"); } 

    另外一个重要的说明。 你必须在你的AndroidManifest.xml中设置android.permission.ACCESS_NETWORK_STATE才能工作。

    _我怎么能在网上文件中find我需要的信息?

    你只需要正确地阅读类的文档,你会发现你正在寻找的所有答案。 查看ConnectivityManager上的文档。 描述告诉你该怎么做。

    ConnectivityManager的getActiveNetworkInfo()方法返回一个NetworkInfo实例,表示可以find的第一个连接的networking接口,如果接口连接,则返回null。 检查这个方法是否返回null应该足以说明互联网连接是否可用。

     private boolean isNetworkAvailable() { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); return activeNetworkInfo != null; } 

    您还需要:

    在你的Android清单。

    编辑:

    请注意,拥有活动的networking接口并不能保证特定的networking服务可用。 networking问题,服务器停机时间,低信号,强制门户,内容filter等都可以阻止你的应用程序到达服务器。 例如,您无法确定您的应用是否可以访问Twitter,直到您收到来自Twitter服务的有效回复。

    getActiveNetworkInfo()不应该永远不会给null。 当他们提出这个问题时,我不知道他们在想什么。 它总是给你一个对象。

    也许我发现自己:

     ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting(); 

      以上就是android开发分享检测Android上是否有可用的Internet连接相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/addevelopment/524000.html

      (0)
      上一篇 2020年12月13日
      下一篇 2020年12月13日

      精彩推荐