在运行时检查互联网连接

时间:2015-09-07 11:02:16

标签: android

美好的一天,我有一个包含2个活动的应用程序:主页和详细信息页面。

当有互联网连接时,用户可以从主页面导航到详细信息页面。没有互联网连接时,他不能这样做。

问题是:当我在详细信息页面并关闭wifi时,我想完成此活动,我该如何实现此功能? 我在主要活动课上签了这样的东西:

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

当我使用互联网启动应用程序或没有它时,它工作正常,但是当我在运行时关闭wifi时,它不起作用。

无论如何,谢谢!

3 个答案:

答案 0 :(得分:5)

您必须Monitor for Changes in Connectivity

  

只要连接详细信息发生更改,ConnectivityManager就会广播CONNECTIVITY_ACTION(" android.net.conn.CONNECTIVITY_CHANGE")操作。您可以在清单中注册广播接收器以收听这些更改并相应地恢复(或暂停)您的后台更新。

每当互联网状态发生变化时,您的广播接收器将被呼叫,如果互联网断开连接,您可以相应地处理它。

public class InternetReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {     

    if (isConnected()) 
        Log.d("NetReceiver", "Internet is connected");  
    else
        Log.d("NetReceiver", "Internet is not connected");    
   }   
};

此方法检查来自所有互联网来源的连接,包括3g

public boolean isConnected() {

Runtime runtime = Runtime.getRuntime();
try {

    Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
    int exitValue = ipProcess.waitFor();
    return (exitValue == 0);

  } catch (IOException e)          { Log.e("ERROR", "IOException",e); } 
    catch (InterruptedException e) { Log.e("ERROR", "InterruptedException",e); }

return false;
}

在您的清单文件中添加:

<receiver android:name=".InternetReceiver">
<intent-filter>
    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>

以下是Source

答案 1 :(得分:3)

您可能希望实现侦听连接终止事件的广播接收器,以便您可以立即采取措施并完成详细活动。 这link可能有所帮助。

答案 2 :(得分:0)

试试这个:

  • 创建一个检查互联网状态或连接的帮助方法
  • 创建一个线程或Runnable
  • 在Thread或Runnable的run()内,调用helper方法
  • 在MainActivity的onCreate()中,启动Thread或Runnable每n秒运行一次