为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

交互式爱情 2019-05-30 13:43:57
检测Android上是否有可用的Internet连接我需要检测一下Android设备是否连接到互联网上。这个NetworkInfo类提供非静态方法。isAvailable()听起来很完美。问题是:NetworkInfo ni = new NetworkInfo();if (!ni.isAvailable()) {     // do something}抛出此错误:The constructor NetworkInfo is not visible.可以肯定的是,还有另一个类返回NetworkInfo对象。但我不知道是哪一个。如何使上述代码片段工作?我怎么能在网上文档中找到我所需要的信息呢?你能为这种类型的检测提出更好的方法吗?
查看完整描述

3 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

这个getActiveNetworkInfo()方法ConnectivityManager返回NetworkInfo实例,表示它可以找到的第一个连接的网络接口,或者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" />

在你的机器人名单里。

编辑:

请注意,拥有活动的网络接口并不能保证特定的网络服务是可用的。网络问题、服务器停机、低信号、受限门户、内容过滤器等等都会阻止应用程序到达服务器。例如,在收到Twitter服务的有效响应之前,您无法确定应用程序是否可以到达Twitter。


查看完整回答
反对 回复 2019-05-30
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

我检查WI-FI和移动互联网如下.

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;}

显然,它可以很容易地修改,以检查单个特定的连接类型,例如,如果您的应用程序需要WI-FI的潜在更高的速度来正确工作等等。


查看完整回答
反对 回复 2019-05-30
  • 3 回答
  • 0 关注
  • 918 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信