1

我有两台开发设备,一台是 android 2.2 手机,另一台是 Nexus7 平板电脑(没有手机)。两个都有wifi。如果在 2.2phone 上执行下面的代码,它会检测 Wifi 或移动数据是否打开并正常工作。如果我将相同的代码放在 Nexus7 平板电脑上,它会返回即使 wifi 开启也没有互联网连接。我必须做些什么才能使其在两种设备上都能正常工作?

   public boolean isOnline()
   {
ConnectivityManager connMgr =  (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
    return (networkInfo != null && networkInfo.isConnected());
   }  
4

3 回答 3

2

当与路由器建立 WIFI 连接时,isConnected 将返回 true。您确定两台设备上的连接设置完全相同吗?

您也可以尝试 isConnectedOrConnecting() ,它几乎相同,但即使尚未与 ISP 建立连接但仍在建立过程中,它也会返回 true。

还要检查果冻豆的某些权限是否已更改,以允许您检查连接性。

除此之外,我认为这种方法没有理由在不同的设备上采取不同的行动。

于 2012-07-23T14:16:17.037 回答
1

看起来有一些错误ConnectivityManager。看起来这是一个记录在案的错误,还没有修复它:

http://code.google.com/p/android/issues/detail?id=11891

否则,我今年早些时候开发了一个监听网络变化的应用程序。您可以尝试networkInfo.getTypeName(),这将返回“WIFI”或“null”(对于数据网络也将返回“MOBILE”)。您可以尝试摆脱这种情况。今年早些时候我用这条线作为广播接收器来监控网络变化,它从 2.2 到 4.0.4 都可以工作(还没有在 4.1 上测试过)。

于 2012-07-23T14:35:18.013 回答
1

事实证明问题出在其他地方。上面发布的代码正在运行,但是我收到了一个 Java 错误,并且它说不能写入 HEAD。我不需要,所以我注释掉了。该代码运行良好,没有在 2.2 下引发错误,但在 4.1 下引发了 JAVA 错误。很高兴我有设备可以测试,模拟器不会捕捉到这一点。为 2.2 编译。哇。

   File root = Environment.getExternalStorageDirectory();
   URL u = new URL(url);
   HttpURLConnection c = (HttpURLConnection) u.openConnection();
   c.setRequestMethod("HEAD");
// c.setDoOutput(true);   //<<< Allowed on 2.2 Not on 4.1
   c.connect();
   InputStream in = c.getInputStream();
   long dt=c.getLastModified();
于 2012-07-23T16:40:55.507 回答